棧的基本操作

2021-07-08 09:35:04 字數 2439 閱讀 3094

結論:後進先出(last in first out),簡稱為lifo線性表。

棧的基本運算有六種:

構造空棧:initstack(sqstack &s)

判棧空:  stackempty(sqstack s)

判棧滿: stackfull(sqstack s)

進棧: push(sqstack &s, selemtype x)可形象地理解為壓入,這時棧中會多乙個元素,棧改變,所以用了&

退棧: pop(sqstack &s, selemtype &e) 可形象地理解為彈出,彈出後棧中就無此元素了,棧改變,所以用了&。

取棧頂元素:stacktop(sqstack s, selemtype &e)與彈出不同,只是使用棧頂元素的值,棧不變,所以無&。

我們要了解的是,在

順序棧中有"

上溢"和"

下溢"的概念。順序棧好比乙個箱子,我們在裡頭放了一摞磚,當我們要取磚頭的話只能從第一塊開始拿,那麼當我們把磚頭放到這個棧中超過盒子的頂部時就放不下了(超出箱子邊沿高度不算),這時就是"上溢","

上溢"也就是棧頂指標指出棧的外面,

顯然是出錯了。反之,當棧中已沒有磚頭時,我們再去拿,看看沒磚頭了,把箱子拎起來看看箱底,還是沒有,這就是"

下溢"。"

下溢"本身可以表示棧為空棧,

因此可以用它來作為控制轉移的條件。

下邊是順序棧的簡單操作以及乙個簡單例子:

#include "stdafx.h"

#include using namespace std;

#define stack_init_size 10

#define stack_increment 10

#define overflow -2

#define true 1

#define false 0

#define ok 1

#define error 0

#define infeasible -1

typedef int selemtype;

typedef int status;

typedef structsqstack;

status initstack(sqstack &q)

q.top = q.base;

q.stacksize = stack_init_size;

return ok;

}status gettop(sqstack q, selemtype &e)

e = *(q.top - 1);

return ok;

}status push(sqstack &q, selemtype e)

q.top = q.base + q.stacksize;

q.stacksize = q.stacksize + stack_increment;

} *q.top++ = e;

return ok;

}status pop(sqstack &q, selemtype &e)

e = *--q.top;

return ok;

}//棧的乙個使用例子,數值轉換,把任意乙個非負十進位制數轉換成八進位制數

status conversion()

int e;

cout << "輸出八進位制數:" << endl;

while (q.base != q.top)

return ok;

}int _tmain(int argc, _tchar* argv)

selemtype e;

gettop(s, e);

cout << "當前棧大小為:" << s.stacksize << endl;

cout << "棧頂元素為" << e << endl;

push(s, 10);

pop(s, e);

cout << "棧大小變為:" << s.stacksize << endl;

cout << "棧頂元素為" << e << endl;

conversion();

system("pause");

return 0;

}

realloc原型是extern void *realloc(void *mem_address, unsigned int newsize);

功能:

先判斷當前的指標是否有足夠的連續空間,如果有,擴大mem_address指向的位址,並且將mem_address返回,如果空間不夠,先按照newsize指定的大小分配空間,將原有資料從頭到尾拷貝到新分配的記憶體區域,而後釋放原來mem_address所指記憶體區域(注意:原來指標是自動釋放,不需要使用free),同時返回新分配的記憶體區域的首位址。即重新分配儲存器塊的位址。

棧 的基本操作。

include include typedef struct node node,pnode typedef struct stack stack,pstack void initialize pstack mystack 棧的初始化。int push stack pstack mystack,in...

棧的基本操作

描述 棧是一種重要的資料結構,它具有push k和pop操作。push k是將數字k加入到棧中,pop則是從棧中取乙個數出來。棧是後進先出的 把棧也看成橫向的乙個通道,則push k是將k放到棧的最右邊,而pop也是從棧的最右邊取出乙個數。假設棧當前從左至右含有1和2兩個數,則執行push 5和po...

棧的基本操作

下面先實現站的基本功能,最後通過乙個test來測試下方法是否實現 建個.c檔案 typedef struct seqstack 初始化 seqstack seqstackinit return null 判斷棧是否為空 int seqstackisempty seqstack s void seqs...