栈(C语言)
#include <stdio.h>
#include <stdlib.h>typedef int elemType;typedef struct List
{elemType elem;struct List* next;
}Node;typedef struct listStack
{Node* top;int stackSize;
}Stack;//創建空棧
Stack* createStack()
{Stack* S;if((S=(Stack*)malloc(sizeof(Stack)))!=NULL){S->top=NULL;S->stackSize=0;}return S;
}//判斷棧是否為空棧
bool isEmptyStack(Stack* S)
{return S->top==NULL&&S->stackSize==0;
}//入棧
void push(Stack* S,elemType elem)
{Node* p;if((p=(Node*)malloc(sizeof(Node)))!=NULL){p->elem=elem;p->next=NULL;if(isEmptyStack(S))S->top=p;else{p->next=S->top;S->top=p;}S->stackSize++;}
}//出棧 elem返回值
void pull(Stack* S,elemType* elem)
{if(isEmptyStack(S))printf("空棧,無法出棧\r\n");else{*elem=S->top->elem;Node* p;p=S->top;S->top=p->next;free(p);p=NULL;S->stackSize--;}
}//返回棧大小
int getSizeStack(Stack* S)
{return S->stackSize;
}//清空棧
void clearStack(Stack* S)
{if(isEmptyStack(S))printf("空棧,不用清空\r\n");else{int elem;while(!isEmptyStack(S))pull(S,&elem);printf("清空棧完畢\r\n");}
}//銷毀棧
void destroyStack(Stack* S)
{if(isEmptyStack(S))printf("空棧,不用銷毀\r\n");else{clearStack(S);printf("銷毀棧完畢\r\n");//free(S);//S=NULL;}
}//返回棧頂 elem返回值
Node* getTopStack(Stack* S,elemType* elem)
{*elem=S->top->elem;return S->top;
}//遍歷棧
void displayStack(Stack* S)
{printf("遍歷棧\t");if(isEmptyStack(S))printf("空棧\r\n");else{int i=S->stackSize;Node* p=S->top;while(i--){printf("%d\t",p->elem);p=p->next;}printf("\r\n");}
}int main()
{Stack* S;int elem;S=createStack();int i;for(i=0;i<5;i++)push(S,i);displayStack(S);for(i=0;i<5;i++){pull(S,&elem);printf("%d\t",elem);}printf("\r\n");displayStack(S);/*clearStack(S);displayStack(S);destroyStack(S);displayStack(S);*/return 0;
}
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
- 上一篇: 链表(C语言)
- 下一篇: 冒泡排序 选择排序 快速排序(C语言)