c语言实现链栈
#include <stdio.h>
#include <stdlib.h>
//定义
typedef struct StackNode{
int data;
struct StackNode *next;
}StackNode, *LinkStack;
//初始化
bool InitList (LinkStack &S){
S=(LinkStack)malloc(sizeof(StackNode));
S->next=NULL;
return true;
}
//入栈
int Push(LinkStack &S,int n){
S = (LinkStack)malloc(sizeof(StackNode));
S = NULL;
printf("请倒序输入要插入的值:\n");
for(int i = 0;i<n;i++)
{
LinkStack p = (LinkStack)malloc(sizeof(StackNode));
scanf("%d",&(p->data));
p->next = S;
S = p;
}
}
//求栈长
int Length(LinkStack S){
int count=0;
while(S!=NULL){
S=S->next;
++count;
}
return count;
}
//出栈
int Pop(LinkStack &S,int &e){
if (S->next==NULL){
printf("栈为空\n");
return 0;
}
while(S!=NULL){
// LinkStack p =S->next;
// S->next=p->next;
// e=p->data;
e=S->data;
LinkStack p=S;
S=S->next;
free(p);
printf("%5d",e);
}
return e;
}
//销毁
int Destroy (LinkStack &S){
LinkStack q=S;
while(S!=NULL){
q=q->next;
free(q);
S=q;
}
printf("链栈已销毁");
}
//取栈顶元素
int
//主函数
int main(){
//定义初始化
LinkStack S;
if(InitList(S)){
printf("链栈初始化成功!\n");
}
else{
printf("链栈初始化失败!\n");
}
//入栈
int n;
printf("输入要插入的元素个数:");
scanf("%d",&n);
Push(S, n);
printf("栈长为;%d\n", Length(S));
//出栈
int e3;
printf("所取栈中的元素为:\n");
Pop(S,e3);
printf("\n");
Destroy (S);
return 0;
}