C語言實現棧 基於陣列

2021-07-24 22:05:50 字數 4223 閱讀 4176

棧是一種操作受限的資料結構,只允許從一段操作,而且先進後出(filo  first in last out)這裡將棧的操作封裝在c語言的標頭檔案裡

實現棧的**如下

#include#define maxsize 10

typedef int datatype;

//sequence stack 實現順序棧,使用陣列來實現

struct stack

;typedef struct stack stack;

//建立棧

stack s;

//初始化棧

void init()

//判斷棧是否為空

bool empty()

else

}//判斷棧是否已滿了

bool full()

else

}//入棧

void push(datatype element)

else

}//出棧

void pop()

else

}//取棧頂元素

datatype top()

else

}//銷毀棧

void destroy()

測試棧的**如下:

#include#include "sequencestack.h"

int main()

printf("----------------------------------");

printf("\n###########取棧頂元素###########\n");

printf("%d\n",top());

printf("----------------------------------");

//出棧操作

printf("\n###########出棧操作###########\n");

for(i=0;i<=10;i++)

printf("----------------------------------");

printf("\n###########取棧頂元素###########\n");

top();

printf("----------------------------------");

printf("\n###########銷毀棧###########\n");

push(10);

destroy();

top();

}

這樣實現棧,巨集定義處maxsize表示棧的大小,方便以後修改,typedef也是同樣的效果,可以隨時改變資料型別。

在操作棧的時候也只要用到push、pop、top、等方法就可以了

這樣的棧有乙個明顯的缺點,是棧被定義在標頭檔案裡,這樣使用者只能使用乙個棧,無法同時建立兩個棧,考慮到這一點,對棧的**做出修改

實現棧的**

#include#define maxsize 10

typedef int datatype;

//sequence stack 實現順序棧,使用陣列來實現

struct stack

;typedef struct stack stack;

//建立棧

// stack s;

//初始化棧

void init(stack *s)

//判斷棧是否為空

bool empty(stack *s)

else

}//判斷棧是否已滿了

bool full(stack *s)

else

}//入棧

void push(stack *s,datatype element)

else

}//出棧

void pop(stack *s)

else

}//取棧頂元素

datatype top(stack *s)

else

}//銷毀棧

void destroy(stack *s)

測試棧的**

#include#include "sequencestack1.0.h"

int main()

printf("----------------------------------");

//取棧頂元素

printf("\n###########取棧頂元素###########\n");

printf("%d\n",top(s));

printf("----------------------------------");

//出棧操作

printf("\n###########出棧操作###########\n");

for(i=0;i<=12;i++)

printf("----------------------------------");

//取棧頂元素

printf("\n###########取棧頂元素###########\n");

top(s);

printf("----------------------------------");

//銷毀棧

printf("\n###########銷毀棧###########\n");

push(s,10);

destroy(s);

top(s);

}

這裡可以在主函式中自己定義棧,從而同時實現多個棧,但是這樣的棧還是大小固定的,每次修改maxsize很麻煩,所以想到malloc函式,對棧的**做了進一步的修改

實現棧的**

#include#include#define maxsize 10

typedef int datatype;

//sequence stack 實現順序棧,使用陣列來實現

struct stack

;typedef struct stack stack;

//建立棧

int realsize=maxsize;

// stack s;

//初始化棧

void init(stack *s)

//判斷棧是否為空

bool empty(stack *s)

else

}//判斷棧是否已滿了

void full(stack *s)

}//入棧

void push(stack *s,datatype element)

//出棧

void pop(stack *s)

else

}//取棧頂元素

datatype top(stack *s)

else

}//銷毀棧

void destroy(stack *s)

測試棧的**

#include#include "dynamicstack1.0.h"

int main()

printf("----------------------------------");

//取棧頂元素

printf("\n###########取棧頂元素###########\n");

printf("%d\n",top(s));

printf("----------------------------------");

//出棧操作

printf("\n###########出棧操作###########\n");

for(i=0;i<=12;i++)

printf("----------------------------------");

//取棧頂元素

printf("\n###########取棧頂元素###########\n");

top(s);

printf("----------------------------------");

//銷毀棧

printf("\n###########銷毀棧###########\n");

push(s,10);

destroy(s);

top(s);

}

這樣就可以實現無限大小的棧了,這裡realloc之後的指標,在free的時候容易出錯

C語言實現棧

下面程式分別實現了棧的順序儲存結構和棧的鏈式儲存結構的壓棧和彈棧操作,均在dev c 下執行通過。棧的順序儲存結構 include include include include include define ok 1 define error 0 define maxsize 10 typedef...

C語言實現棧

一 實現 vim stack c.c include stdio.h include stdlib.h 棧元素結構體 用來描述每個棧元素 struct list 棧結構體 棧頂元素指標,棧大小資訊 struct stack 棧初始化 struct stack stackinit void 入棧函式 ...

C語言實現棧

1.概念 棧是一種線性的資料結構,採用先進後出的方式管理資料,一端的位置固定 棧底 另外一端隨著資料的進出隨時改變 棧頂 2.實現思路 棧是一種邏輯概念,可以使用順序結構來實現 順序棧 也可以使用鏈式結構來實現 鏈式棧 鏈式棧可以使用單鏈表來實現,以頭結點作為棧頂,從頭部插入作為入棧,從頭部刪除作為...