c語言棧的實現以及操作
阿新 • • 發佈:2019-01-01
此文章包含了棧的結構體實現,單資料型別實現,以及清空,判空,入棧,出棧,求棧頂元素的實現
棧作為一個最簡單的資料結構,實現起來也非常容易,想想現在有一摞盤子,每次只能取走或放一個盤子且只能最上面進行操作;
那麼我們如果有一個索引TOP時刻指向最上面的那個盤子,棧不就實現了麼?
第一段是單資料型別的程式碼
#include <stdio.h> #include <stdlib.h> #include <string.h> #define maxn 110//棧的最大值 typedef int elem; //方便修改資料型別 typedef struct{ int top; ///棧頂的索引 elem index[maxn]; }Stack; Stack stack; ///為了方便這裡直接定義全域性變量了,用區域性變數的話在每個函式加上取地址符和宣告就行了 void stack_pop(){ ///元素出棧,此函式無返回值 stack.top--; } void stack_push(elem buf){ ///元素入棧 stack.index[++stack.top] = buf; } int stack_empty(){///判空,如果棧為空的話返回1,否則返回0 return stack.top == -1; } void stack_clear(){ ///清空棧 stack.top = -1; } int stack_size(){ ///求棧內元素數 return stack.top+1; } elem stack_top(){ ///返回棧頂元素 return stack.index[stack.top]; } int main() { stack_clear();///初始化棧 elem buf; buf = 10; stack_push(buf); printf("%d\n",stack_top()); printf("%d\n",stack_empty()); printf("%d\n",stack_size()); stack_pop(); printf("%d\n",stack_size()); return 0; }
下面是結構體棧的實現,和上面的基本一樣,只修改了部分程式碼,添加了一個可以糅合資料型別的結構體陣列elem
#include <stdio.h> #include <stdlib.h> #include <string.h> #define maxn 11 typedef struct { int n; char str[maxn]; }elem; ///要存用棧儲的資料型別 typedef struct{ int top; ///棧頂的索引 elem index[maxn]; }Stack; Stack stack; ///為了方便這裡直接定義全域性變量了,用區域性變數的話加上取地址符和宣告就行了 void stack_pop(){ ///元素出棧,此函式無返回值 stack.top--; } void stack_push(elem buf){ ///元素入棧 stack.index[++stack.top].n = buf.n; strcpy(stack.index[stack.top].str,buf.str); } int stack_empty(){///判空,如果棧為空的話返回1,否則返回0 return stack.top == -1; } void stack_clear(){ ///清空棧 stack.top = -1; } int stack_size(){ ///求棧內元素數 return stack.top+1; } elem stack_top(){ ///返回棧頂元素 return stack.index[stack.top]; } int main() { stack_clear(); elem buf; buf.n = 1; strcpy(buf.str,"abc"); stack_push(buf); printf("%d %s\n",stack_top().n,stack_top().str); printf("%d\n",stack_empty()); printf("%d\n",stack_size()); stack_pop(); printf("%d\n",stack_size()); return 0; }