栈基本操作
PS1:
顺序栈:
1 //ADT Stack 2 //line 3 #define MaxStackSize 100 4 typedef int ElemType; 5 typedef struct 6 { 7 ElemType stack[MaxStackSize]; 8 int top; 9 }Stack; 10 void InitStack(Stack *S) 11 { 12 if((S=(Stack*)malloc(sizeof(Stack)))==NULL) 13 exit(OVERFLOW); 14 S->top=-1; 15 } 16 int StackEmpty(Stack S) 17 { 18 if(S.top==-1) 19 return 1; 20 else return 0; 21 } 22 void StackPush(Stack*S,ElemType elem) 23 { 24 if(S->top==MaxStackSize-1) 25 { 26 pritnf("%d","Stack is full"); 27 exit(0); 28 } 29 else 30 S-top++; 31 S->top=elem; 32 } 33 void StackPop(Stack *S ,ElemType * elem) 34 { 35 if(StackEmpty(*S)) 36 { 37 printf("Stack is empty"); 38 exit(0); 39 } 40 else 41 *elem=S->top--; 42 } 43 void Gettop(Stack S,ElemType * elem) 44 { 45 if(StackEmpty(*S)) 46 { 47 printf("Stack is empty"); 48 exit(0); 49 } 50 else 51 *elem=S.top; 52 }
PS2:
链式栈:
1 //ADT Stack 2 //Node 3 typedef int ElemType; 4 typedef struct 5 { 6 ElemType data; 7 Struct StackNode *next; 8 }StackNode; 9 typedef struct 10 { 11 StackNode *top; 12 int length; 13 }Stack; 14 void InitStack(Stack *S) 15 { 16 S->top=NULL; 17 } 18 void Push(Stack *S,ElemType elem) 19 { 20 p=(StackNode*)malloc(sizeof(StackNode)); 21 if(!p) 22 exit(OVERFLOW); 23 else 24 { 25 p->data=elem; 26 p->next=S->top; 27 S->top=p; 28 } 29 } 30 void Pop(Stack *S,ElemType &elem) 31 { 32 if(StackEmpty(*S)) 33 exit("Stack is empty"); 34 else 35 { 36 elem=S->top->data; 37 p=S->top; 38 S->top=p->next; 39 free(p); 40 } 41 } 42 void GetTop(Stack S,ElemType &elem) 43 { 44 if(StackEmpty(S)) 45 exit("Stack is empty"); 46 else 47 elem=S.top->data; 48 } 49 int StackEmpty(Stack S) 50 { 51 if(S.top==NULL) 52 return 1; 53 else 54 return 0; 55 }