栈的链表实现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); }
运行结果:
转载请注明作者:小刘
数据结构---栈的链表实现
时间: 2024-10-28 09:19:11