棧的表示和實現
阿新 • • 發佈:2019-03-29
ati 順序 初始化 div eight include 進行 height 分享圖片
棧是僅能在表尾(棧頂)進行插入或刪除操作的 線性表 後進後出
基本操作: 初始化,判斷是否為空棧,取棧頂元素,插入新的棧頂元素。
非空棧中棧頂指針始終在棧頂元素的下一個位置
分為順序棧:
#include<stdio.h> #include<stdlib.h> typedef struct{ int *base; int *top; int stacksize; }sqstack; void initial(sqstack &s){ s.base=(int *)malloc(10*sizeof(int)); if(s.base==0) exit(0); s.top =s.base; s.stacksize=10; } void push(sqstack &s){ int n,i=0; scanf("%d",&n); do{ scanf("%d",s.top++); i++; }while(i<n); } void pop(sqstack &s,int &e){ if(s.top==s.base) exit(0); e=*--s.top; } main(){ sqstack s;int e; initial(s); push(s); while(s.top-s.base>0){ //判斷是否為空棧 pop(s,e); printf("%d",e);} }
鏈棧:
#include<stdio.h> #include<stdlib.h> typedef struct Lnode{ int data; struct Lnode *next; }Lnode, *Linkstack; // 鏈棧的結點定義和單鏈表一樣,只不過它只能在棧頂操作 void initial(Linkstack s){ s=NULL; } void push(Linkstack &s, int e){ Linkstack p; p=(Linkstack)malloc(sizeof(Lnode)); p->data = e; p->next =s; s=p; } void pop(Linkstack &s,int &e){ Linkstack p; if(s->next==NULL) exit(0); p=s; e=p->data; s=s->next; free(p); } main(){ int e,n,i; Linkstack s; initial(s); scanf("%d",&n); while(n--){ scanf("%d",&i); push(s,i);} while(s->next!=NULL){ pop(s,e); printf("%d",e); } printf("\n"); }
鏈棧最後運行是有一個bug
棧的表示和實現