1. 程式人生 > >棧的表示和實現

棧的表示和實現

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

棧的表示和實現