前言
博文中主要是链栈的基本操作的知识点,(初始化链栈、创建链栈、入栈、出栈
、取栈顶元素、栈长度、栈空判断、链栈的销毁等)主要通过程序和程序的注释对这块内容进行总结和学习。
链栈基本操作
链栈基本操作的程序代码
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct node{
ElemType data;
struct node *next;
}StackNode, *LinkStack;
//创建一个空栈
Status InitStack(LinkStack &L){
L = new StackNode;
L->next = NULL;
return OK;
}
//创建一个栈
Status CreateStack(LinkStack &L){
cout<<"请输入栈空间的长度:"<<endl;
int l;
cin>>l;
//定义一个结点指针 做结点数据的插入操作
//同链表的头插法
cout<<"请输栈内的数据:"<<endl;
for(int i=0;i<l;i++){
StackNode *p = new StackNode;
cin>>p->data;
p->next = L->next;
L->next = p;
}
return OK;
}
Status EmptyLinkStack(LinkStack L){
if(L->next != NULL)
return ERROR;
return OK;
}
//销毁一个栈
Status DestoryStack(LinkStack &L){
//一个结点一个结点的删除
while(L->next != NULL){
StackNode *p = L->next;
L->next = p->next;
delete(p);
}
return OK;
}
//栈的输入 push
Status Push(LinkStack &L,ElemType e){
StackNode *p = new StackNode;
p->data = e;
p->next = L->next;
L->next = p;
return OK;
}
//栈的输出 pop
Status Pop(LinkStack &L,ElemType e){
//如果栈的内容为空的 给出提示
if(EmptyLinkStack(L)){
cout<<"Pop异常!此时栈内容为空"<<endl;
return ERROR;
}
//执行一次出栈操作
StackNode *p = new StackNode;
p = L->next;
e = p->data;
L->next = p->next;
delete(p);
return OK;
}
Status GetTop(LinkStack &L,ElemType &e){
//如果栈的内容为空的 给出提示
if(EmptyLinkStack(L)){
cout<<"GetTop异常!此时栈内容为空"<<endl;
return ERROR;
}
StackNode *p = new StackNode;
p = L->next;
e = p->data;
L->next = p->next;
delete(p);
return e;
}
Status LenListStack(LinkStack L){
int len = 0;
StackNode *p = new StackNode;
p = L->next;
while(p){
len++;
p = p->next;
}
return len;
}
//栈内容的输出
Status PrintStack(LinkStack L){
if(!EmptyLinkStack(L)){
StackNode *p = L->next;
cout<<"链栈内的元素内容是:"<<endl;
while(p){
cout<<p->data<<" ";
p = p->next;
}
cout<<endl;
}
else{
cout<<"此时栈内容为空"<<endl;
return ERROR;
}
return OK;
}
int main(){
LinkStack L;
ElemType e,temp;
//栈的初始化
InitStack(L);
//创建栈
CreateStack(L);
//输出栈
PrintStack(L);
//入栈
Push(L,99);
PrintStack(L);
cout<<"链栈的长度为:"<<endl<<LenListStack(L)<<endl;
//出栈
Pop(L,e);
cout<<"链栈的长度为:"<<endl<<LenListStack(L)<<endl;
PrintStack(L);
//获取栈顶元素
cout<<"获取的栈顶元素为:"<<endl<<GetTop(L,e)<<endl;
//清空栈
DestoryStack(L);
PrintStack(L);
return 0;
}
/*
7
1 2 3 4 5 6 7
*/
程度运行的截图:
结语
针对栈的有关知识点,主要可以通过对有关栈的应用进行实践,其中包括有:函数的递归思想、进制间转换、回文串的判断、括号的匹配问题、中缀/后缀表达式、函数的调用、迷宫问题。
文中主要对链栈进行了总结,顺序栈的思路和链栈的类似,设有一个标志位top来表示栈的状态,push和pop该top位做出相应的改变即可。
家里面有点冷,自己有点懒散,ε=(´ο`*)))