18.11.17
棧是一種只限定在表尾進行插入和刪除的線性表,這裡的表尾指的是棧頂,而不是棧尾,所以棧又被稱為先進後出的線性表,也就是說棧是乙個類似於木桶之類存在,先放進去的後拿出來
我們通常用乙個變數top來標誌棧頂元素的變化,若棧的長度為stacksize,那麼top的值就必須小於stacksize,例如,當棧中只有乙個元素時,top等於0,當棧中沒有元素時,即棧為空棧,top等於-1
既然是順序儲存結構實現棧,自然少不了陣列出席,這可比鏈式簡單多了,先定義個棧的結構,其形式跟線性表的順序儲存結構真的很像,非常非常像,線性表裡邊是有乙個陣列加乙個整型變數存長度,而順序棧裡邊是乙個陣列加乙個整型變數top存棧尾的位置,**如下
結構定義
typedef structsqstack;//將棧的型別命名為sqstack
跟順序儲存實現的線性表很像,它是使線性表的長度length等於0,而在棧這邊,是使top等於-1(棧空時top==-1)
void createstack(sqstack *s)
在棧還不是滿的情況下,每進乙個元素,top加一
int push(sqstack *s,selemtype e)
有進就得有出,出棧函式要求我們將彈出的元素儲存下來,在棧不空的情況下,將彈出元素賦給乙個指標,然後top減1
int pop(sqstack *s,selemtype *e)
*e=s->data[s->top];
s->top--;
return 1;
}
注意以上的入棧和出棧函式均未涉及任何迴圈
所以時間複雜度為o(1)
我們不知道棧裡面的情況折騰的怎麼樣了,需要乙個列印函式來檢視,很簡單,將棧中的陣列列印出來就好了
int printstack(sqstack s)sqstack;
//函式宣告
void createstack(sqstack *s);
int push(sqstack *s,selemtype e);
int pop(sqstack *s,selemtype *e);
int printstack(sqstack s);
int main()
printf("此時棧中元素為");
printstack(s);
for(i=0;i<11;i++)
}void createstack(sqstack *s)
int push(sqstack *s,selemtype e)
int pop(sqstack *s,selemtype *e)
*e=s->data[s->top];
s->top--;
return 1;
}int printstack(sqstack s){
int i;
for(i=0;i除錯結果如下
棧的順序儲存結構實現。
ifndef stack h define stack h define size 5 typedef structstack 初始化棧的儲存區 void stack init stack 清理棧的儲存區 void stack deinit stack 判斷棧是不是滿了 int stack full...
棧的順序儲存結構及實現
棧是線性表的特例,棧只在棧頂進行插入及刪除操作,因此資料是後進先出。棧的順序儲存其實也是線性表順序儲存的簡化。棧的結構定義如下 進棧操作push,其 如下 插入元素e為新的棧頂元素 stauts push sqstack s,selemtype e s top 棧頂指標 1 s data s top...
棧的順序儲存結構
標頭檔案 函式的宣告 include include include define stacksize 100 typedef int elemtype typedef struct seqstack void initstack seqstack s 初始化棧 int stackempty seq...