資料結構之棧(Stack)的關於C語言的實現
阿新 • • 發佈:2018-12-12
C語言實現棧共有兩種方法,一種是使用陣列的包含最大Size的棧,另外一種是運用連結串列的方法實現
關於陣列方法實現的程式碼如下:
#include<stdio.h> /** * Your MinStack struct will be instantiated and called as such: * struct MinStack* obj = minStackCreate(maxSize); * minStackPush(obj, x); * minStackPop(obj); * int param_3 = minStackTop(obj); * int param_4 = minStackGetMin(obj); * minStackFree(obj); */ typedef struct { int * data; int Top; int MaxSize; } MinStack, * pStack; /** initialize your data structure here. */ MinStack* minStackCreate(int maxSize) { pStack s= (pStack)malloc(sizeof(MinStack)); s->data=(int)malloc(maxSize * sizeof(int)); s->Top=-1; s->MaxSize=maxSize; return s; } void minStackPush(MinStack* obj, int x) { obj->Top++; obj->data[obj->Top]=x; } void minStackPop(MinStack* obj) { obj->Top--; } int minStackTop(MinStack* obj) { return obj->data[obj->Top]; } int minStackGetMin(MinStack* obj) { int i=0; int re=obj->data[0]; for(i=0;i<=obj->Top;i++){ if(obj->data[i]<re){ re=obj->data[i]; } } return re; } void minStackFree(MinStack* obj) { int i=0; for(i=0;i<obj->Top;i++){ free(obj->data[i]); } free(obj); obj=NULL; } int main(void){ struct MinStack* obj = minStackCreate(5); minStackPush(obj,-2); minStackPush(obj,0); minStackPush(obj,-3); printf("%d\n",minStackGetMin(obj)); minStackPop(obj); printf("%d\n",minStackTop(obj)); printf("%d\n",minStackGetMin(obj)); }
關於連結串列的方法實現棧的程式碼如下:
#include<stdio.h> /** * Your MinStack struct will be instantiated and called as such: * struct MinStack* obj = minStackCreate(maxSize); * minStackPush(obj, x); * minStackPop(obj); * int param_3 = minStackTop(obj); * int param_4 = minStackGetMin(obj); * minStackFree(obj); */ typedef struct { int data; struct MinStack * next; } MinStack , * Stack; /** initialize your data structure here. */ MinStack* minStackCreate(int maxSize) { Stack head = (Stack)malloc(sizeof(MinStack)); head->next=NULL; return head; } void minStackPush(MinStack* obj, int x) { Stack snew= (Stack)malloc(sizeof(MinStack)); snew->data=x; snew->next=obj->next; obj->next=snew; } void minStackPop(MinStack* obj) { Stack q = (Stack)malloc(sizeof(MinStack)); q=obj->next; obj->next=obj->next->next; free(q); q=NULL; } int minStackTop(MinStack* obj) { return obj->next->data; } int minStackGetMin(MinStack* obj) { Stack p=obj; int re=obj->next->data; while(p!=NULL){ if(p->data<re){ re=p->data; } p=p->next; } } void minStackFree(MinStack* obj) { while(obj!=NULL){ Stack p=obj->next; free(obj); obj=p; } } int main(void){ struct MinStack* obj = minStackCreate(10); int x=0; minStackPush(obj,-2); minStackPush(obj,0); minStackPush(obj,-3); x=minStackGetMin(obj); printf("%d",x); minStackPop(obj); x=minStackTop(obj); printf("%d",x); x=minStackGetMin(obj); printf("%d",x); }