数据结构(C语言版)实现链栈的创建,赋值随机数,进栈,出栈,取栈顶元素,输出
1.链表(链式存储结构):
运算时受限的单链表,只能在链表头部进行操作,故没有必要附加头结点,栈顶指针就是链表的头指针
2.图示
3.代码块
- 链栈定义
//链栈定义 typedefstructStackNode{ SElemTypedata; structStackNode*next; }StackNode,*LinkStack;
- 链栈初始化
//链栈初始化StatusInitStack(LinkStack&S){ S=NULL; returnOK; }
- 链栈压栈
//链栈进栈StatusPush(LinkStack&S,SElemTypee){ //创建新结点,链栈没有上限 StackNode*p=newStackNode(); if(!p) returnERROR; p->data=e; p->next=S; S=p; returnOK; }
- 链栈出栈
//链栈出栈StatusPop(LinkStack&S,SElemType&e){ //判断链栈是不是空if(!S) returnERROR; StackNode*p=S; e=S->data; S=S->next; deletep; returnOK; }
- 链栈获取栈顶元素
//取链栈栈顶元素 StatusGetTop(LinkStackS,SElemType&e){ //判断链栈是不是空if(!S) returnERROR; e=S->data; returnOK; }
- 链栈赋随机值
//链表赋值 StatusInStack(LinkStack&S,intn){ for(inti=0;i<n;i++){ Push(S,rand()); } returnOK; }
- 链栈输出
//链栈打印StatusPrintStack(LinkStackS){ //判断链栈是不是空 if(!S) returnERROR; for(inti=0;S;i++){ cout<<S->data<<" "; S=S->next; } cout<<endl; returnOK; }
4.代码实现
usingnamespacestd; typedefintSElemType; typedefintStatus; //链栈定义 typedefstructStackNode{ SElemTypedata; structStackNode*next; }StackNode,*LinkStack; //链栈初始化StatusInitStack(LinkStack&S){ S=NULL; returnOK; } //链栈进栈StatusPush(LinkStack&S,SElemTypee){ //创建新结点,链栈没有上限 StackNode*p=newStackNode(); if(!p) returnERROR; p->data=e; p->next=S; S=p; returnOK; } //链栈出栈StatusPop(LinkStack&S,SElemType&e){ //判断链栈是不是空if(!S) returnERROR; StackNode*p=S; e=S->data; S=S->next; deletep; returnOK; } //取链栈栈顶元素 StatusGetTop(LinkStackS,SElemType&e){ //判断链栈是不是空if(!S) returnERROR; e=S->data; returnOK; } //链栈打印StatusPrintStack(LinkStackS){ //判断链栈是不是空 if(!S) returnERROR; for(inti=0;S;i++){ cout<<S->data<<" "; S=S->next; } cout<<endl; returnOK; } //链表赋值 StatusInStack(LinkStack&S,intn){ for(inti=0;i<n;i++){ Push(S,rand()); } returnOK; } intmain(){ inte; //链表初始化 LinkStackS; InitStack(S); //链表赋值 cout<<"链表赋值"<<endl; cout<<"随机给链表赋值多少个"<<endl; cin>>e; InStack(S,e); //遍历输出链表 cout<<"链表赋值完成:"<<endl; PrintStack(S); //链表进栈 cout<<"链表进栈"<<endl; cout<<"要进栈的元素:"<<endl; cin>>e; Push(S,e); cout<<"链表进栈完成:"<<endl; PrintStack(S); //链表出栈cout<<"链表出栈"<<endl; cout<<"链表出栈完成:"<<endl; Pop(S,e); cout<<e<<endl; //获取链栈栈顶元素cout<<"获取链栈栈顶元素完成:"<<endl; GetTop(S,e); cout<<e<<endl; return0; }
编译运行