棧的特點:后入先出,只能從棧頂往棧底一個一個壓,取的時候也只能從棧頂一個一個取出來;
下面是簡易的實現:
#include<stdlib.h> #include<stdio.h> #include<malloc.h> #define NODE_SIZE sizeof(struct Node) typedef int Number; typedef struct Node * Stack; struct Node{ Number data; Stack next; }; Stack distribute() { Stack sta = (Stack)malloc(NODE_SIZE); if(sta == NULL) { printf("資源分配失敗!"); exit(-1); } return sta; } Stack init() { Stack s = distribute(); s->data = -1; s->next=NULL; return s; } void push(Stack sta,Number num) { Stack s = distribute(); s->next=sta; s->data=num; sta = s; } Number pop(Stack sta) //取出棧頂的值 {
if(sta->next!=NULL)
{ Stack s = sta->next; sta->next=sta->next->next; return s->data;
}
printf("棧為空"); exit(-1);
} Number get(Stack sta) //查看棧頂元素的值 不取出 { if(sta->next!=NULL){ return sta->next->data; } printf("棧為空"); exit(-1); } void print(Stack sta) { sta=sta->next; while(sta->next != NULL){ printf("%d ",sta->data); sta = sta->next; } } void main() { Stack sta = init(); push(sta,1); push(sta,3); print(sta); }