棧又稱堆疊,它是一種運算受限的線性表,其限制是僅允許在表的一端進行插入和刪除運算。一般把對棧進行運算的一端稱為棧頂,另一端稱為棧底。
一,棧的順序儲存:
struct stacksq;
初始化棧s為空:
void initstack(struct stacksq* s,int ms)
s->maxsize=ms;
s->stack=malloc(ms*sizeof(elemtype));
if(!s->stack)
s->top=-1; }
新元素進棧,即把它插入到棧頂
void push(struct stacksq* s,elemtype x)
void againmalloc(struct stacksq)
s->stack=p;
s->maxsize=2*s->maxsize; }
刪除棧頂元素並返回值
elemtype pop(struct stacksq* s)
s->top--;
return s->stack[s->top+1]; }
讀取棧頂元素的值
elemtype peek(struct stacksq *s)
return s->stack[s->top]; }
判斷s是否為空,若是則返回1表示真,否則返回0表示假
int emptystack(struct stacksq* s)
清除棧s中的所有元素,釋放動態儲存空間
void clearstack(struct stacksq* s)
} 二, 棧的鏈結儲存:
棧的鏈結儲存結構與線性表的鏈結儲存結構相同,也是通過由結點構成的單鏈表實現的,此時表頭指標被稱為棧頂指標,由棧頂指標指向的表頭結點被稱為棧頂結點,整個單鏈表被稱為鏈棧,即鏈結儲存的棧。
初始化鏈棧為空
void initstack(struct snode** hs)
向鏈棧中插入乙個元素
void push(struct snode** hs,elemtype x)
newp->data=x;
newp->next=*hs;
*hs=newp; }
從鏈棧中刪除乙個元素並返回它
elemtype pop(struct snode** hs)
p=*hs;*hs=p->next;
tmp=p->data;
free(p);
return tmp; }
讀取棧頂元素
elemtype peek(struct snode** hs)
return (*hs)->data; }
檢查鏈棧是否為空
int eemptystack(struct snode** hs)
清空鏈棧
void clearstack(struct snode** hs)
*hs=null; }
棧的乙個非常重要應用場景就是遞迴。
資料結構 python語言描述 讀書筆記1
coding utf 8 對集合使用模式匹配 rgbtuple 255,0,0 ff0000 r,g,b hexstring rgbtuple 模式匹配可以跟蹤遞迴的過程,用來除錯遞迴。coding utf 8 defoursum lower,upper,margin 0 page 18 一種跟蹤遞...
《資料結構和演算法分析 C語言描述》讀書筆記
第一章主要講的是數學知識的複習,指數,級數什麼的,最後,淺層次的談了一下遞迴。當乙個函式用它自己來定義時就稱為是遞迴 recursive 的,c語言是允許遞迴的。但重要的是要記住,c提供的僅僅是遵循遞迴思想的一種企圖。不是所有的數學遞迴函式都能有效地或者正確地由c的遞迴模擬來實現。舉個遞迴的小例子 ...
資料結構(C語言描述)棧
棧是一種特殊的表,這種表只在表首進行插入和刪除操作。因此,表首對棧來說具有特殊的意義,稱為棧頂。表尾稱為棧底。不含任何元素的棧稱為空棧。假設乙個棧s中的元素為a n a n 1 a 1 則稱a 1 為棧底元素,a n 為棧頂元素。棧中元素按a 1 a 2 a n 的次序進棧。在任何時候,出棧的元素都...