发布网友 发布时间:2022-05-12 22:50
共1个回答
热心网友 时间:2023-10-28 03:02
#ifndef AVALON_STACK_H #define AVALON_STACK_H #include <stdio.h> #include <string.h> #include <assert.h> #ifndef AVALON_BOOL #define AVALON_BOOL #define TRUE 1 #define FALSE 0 typedef int BOOL;/*自定义的BOOL型*/ #endif /*定义一个栈结构*/ #define DECLARE_NODE(type,name) \ typedef struct type##NODE\ {\ type data;\ struct type##NODE *prior;\ }NODE##name; #define DECLARE_STACK(type,name) \ struct type##STACK\ {\ int size;\ struct type##NODE *base;\ struct type##NODE *top;\ }STACK##name; /*泛类型栈定义*/ #define DECLARE(type,name) \ DECLARE_NODE(type,name); \ DECLARE_STACK(type,name); /****************************************************/ /*初始化栈,name为新声明的栈名字的地址 */ #define INIT(name) \ do{\ STACK##name.base=STACK##name.top=NULL;\ STACK##name.size=0;\ }while(0) /*********** 不破坏栈顶元素取值*************************/ #define GET(name,elem) \ do{\ if(STACK##name.size != 0){\ elem=STACK##name.top->data; \ }\ }while(0) /************** 压入元素elem **************************/ #define PUSH(name,elem) \ do{\ NODE##name *temp=(NODE##name *)malloc(sizeof(NODE##name));\ assert(temp);\ temp->data=elem ;\ (STACK##name.size)++; \ if(1 != STACK##name.size ){ \ temp->prior=STACK##name.top;\ STACK##name.top=temp;\ }\ else{\ temp->prior=NULL;\ STACK##name.top=STACK##name.base=temp;\ }\ }while(0) /********** 栈顶元素赋值给elem,并弹出 ***********/ #define POP(name,elem) \ do{\ NODE##name * temp=STACK##name.top;\ if(STACK##name.size !=0 ){ \ *elem =STACK##name.top->data; \ if( STACK##name.size !=1){ \ STACK##name.top =temp->prior; \ free(temp);\ }\ else \ STACK##name.top=STACK##name.base=NULL;\ (STACK##name.size)--;\ }\ }while(0) /************** 清空栈 ************************/ #define CLEAR(name) \ do{\ NODE##name * temp;\ while( STACK##name.size-- !=0){\ temp=STACK##name.top;\ STACK##name.top=STACK##name.top->prior;\ free(temp);\ }\ STACK##name.size=0;\ STACK##name.base=STACK##name.top=NULL;\ }while(0) /****************栈空???? ************************/ #define EMPTY(name) ( STACK##name.size == 0 ) /*****************长度 ************************/ #define LENGTH(name) (1 ? STACK##name.size : 0) #endif /*这个是测试程序*/ #include "stack.h" #include <stdio.h> #include <stdlib.h> int main(void) { DECLARE(int,A); DECLARE(double,B); double b; int a; INIT(A); INIT(B); printf("%d ",LENGTH(A)); for(a=1;a<=10000 ;a++){ PUSH(A,a); PUSH(A,a); PUSH(A,a); } printf("%d ",LENGTH(A)); for(b=1;b<=10000;b++){ PUSH(B,b); } while( ! EMPTY(A)){ POP(A,&a); if( ! EMPTY(B)){ POP(B,&b); } } CLEAR(A); system("PAUSE"); return 0; } 能否帮上?