標籤:棧 鏈表 資料結構 先進後出
棧的鏈表實現C代碼如下:
#include <stdio.h>typedef int ElemType;typedef struct node{ ElemType Data; struct node *next;}Node;typedef struct stack{ Node *top;}Stack;//初始化棧void InitStack(Stack *S){ S->top=NULL;}//入棧int PushStackValue(Stack *S){ printf("Input the Value of stack member:\n(0-exit)\n"); int value; int i=1; Node *NewNode=(Node *)malloc(sizeof(Node)); printf("Please input the %dst value of stack:\n",i); scanf("%d",&value); NewNode->Data=value; NewNode->next=S->top; S->top=NewNode; i++; while(value) { Node *NewNode=(Node *)malloc(sizeof(Node)); printf("Please input the %dst value of stack:\n",i); scanf("%d",&value); if(value!=0) i++; NewNode->Data=value; NewNode->next=S->top; S->top=NewNode; } S->top=S->top->next; return i-1;}//出棧int PopStackValue(Stack *S,int len){ if(len>0) { printf("the stack %dst value pop out: %d\n",len,S->top->Data); } else { printf("The Stack is empty\n"); } len--; S->top=S->top->next; return len;}//判斷棧空void IsEmpty(Stack *S){ if(S->top==NULL) { printf("The Stack is empty.\n"); } else { printf("The stack is not empty.\n"); }}//清空棧void ClearStack(Stack *S){ S->top=NULL;}//遍曆棧Stack * ScanStack(Stack *S){ Stack *Temp=S; printf("The all stack member(from top to bottom) is:\n"); while(S->top!=NULL) { printf("%d ",S->top->Data); S->top=S->top->next; } printf("\n"); return Temp;}void main(){ Stack *S=(Stack *)malloc(sizeof(Stack)); int len; InitStack(&S); len=PushStackValue(&S); len=PopStackValue(&S,len); len=PopStackValue(&S,len); S=ScanStack(&S); IsEmpty(&S);}
運行結果:
轉載請註明作者:小劉