完成品**:
#include
#include
typedef struct stack * snode;
struct stack ;
snode createstack(int maxsize); //建立堆疊函式
bool isfull(snode s); //檢查棧是否滿
bool push(int data1, snode s); //將data1資料壓入堆疊
bool isempty(snode s); //判斷是否為空函式
int pop(snode s); //出棧函式
int main()
while (!isempty(s))
return 0;
}snode createstack(int maxsize)
bool isfull(snode s)
bool push(int data1, snode s)
s->top++;
s->data[s->top] = data1;
return true;
}bool isempty(snode s)
int pop(snode s) //出棧函式
int data1;
data1 = s->data[s->top--];
return data1;
} vs編譯環境下出現問題**:
問題函式1:
bool isfull(snode s)
此時if語句不成立,函式卻返回true
問題函式1沒有問題,問題出在問題函式2中定義了返回了乙個函式內區域性變數的值,結果被銷毀,使指標指向的值中s->top=s->maxsize
問題函式2:
snode createstack(int maxsize)
建立函式直接申明了乙個區域性變數堆疊結構,在函式結束後直接被銷毀,但在結束後的main函式中的
printf("%d %d\n", s->top,s->maxsize);中卻能夠輸出資料函式中定義的預設資料?
堆疊的順序儲存 順序棧
堆疊的順序儲存結構簡稱順序棧,它是利用一組位址連續的儲存單元依次存放自棧底到棧頂之間的元素。順序棧本質是順序表的簡化,唯一需要確定的是用順序表的那一段表示棧底。通常把順序表的表頭 陣列中下標為0 的一端作為棧底,同時附設指標top指示的棧頂元素在順序表中的位置,top也被成為棧頂指標。由於順序表都是...
堆疊的順序儲存
堆疊是一種特殊的線性表,是一種線性結構,只能對棧的頂端做操作,操作有入棧和出棧兩種,就是插入和刪除。堆疊一定要遵循先進後出 或叫後入先出 原則,就是最後乙個進去的元素一定是第乙個出來的。那麼堆疊要怎麼實現?第乙個很簡單的方法就是用乙個一維陣列,因為棧是一種按順序儲存的結構,所以可以用一維陣列來儲存棧...
陣列記憶體堆疊
陣列 用於儲存一組同一資料型別資料的容器 陣列會對放入其中的資料自動編號,編號是從0開始的 下標 定義格式 資料型別 陣列名 new 資料型別 陣列的大小 可以先宣告再初始化 int arr new int 5 定義了乙個最多能儲存5的整數的陣列 arr 3 4 arr 3 通過陣列名 下標 的形式...