链栈的基本操作和实现

链栈

链栈是指采用链式存储结构实现的栈。通常链栈用单链表来表示。
在这里插入图片描述

存储结构

typedef struct StackNode{
	 ElemType data;
	struct StackNode *next;
}StackNode, *LinkStack;

初始化

Status InitStack(LinkStack &S){
	//构造一个空栈,栈顶指针置为空 
	S = NULL;
	return OK;
}

入栈

出栈示意图
在这里插入图片描述

Status Push(LinkStack &S,ElemType e){
	    LinkStack p;//定义p 
		p=new StackNode;//生成新结点 
		p->data=e;//e赋给新结点的数据域 
		p->next=S; //新结点插入栈顶 
		S=p;//修改栈顶指针为p
		return OK;
}

出栈

出栈示意图
在这里插入图片描述

Status Pop(LinkStack &S,ElemType &e){
	LinkStack p;//定义p 
	if(S==NULL) return ERROR;//栈空 
	e=S->data;//将栈顶元素赋给e 
	p=S;//p临时保存栈顶元素以备释放 
	S=S->next;//修改栈顶指针 
	delete p;//释放空间 
	return OK;
}

链栈的简单实现

#include<iostream>
#define OK 1
#define ERROR 0
using namespace std; 
typedef int Status;
typedef int ElemType;
typedef struct StackNode{
	 ElemType data;
	struct StackNode *next;
}StackNode, *LinkStack; 
Status InitStack(LinkStack &S){
	//构造一个空栈,栈顶指针置为空 
	S = NULL;
	return OK;
}
Status Push(LinkStack &S,ElemType e){
	    LinkStack p;//定义p 
		p=new StackNode;//生成新结点 
		p->data=e;//e赋给新结点的数据域 
		p->next=S; //新结点插入栈顶 
		S=p;//修改栈顶指针为p
		return OK;
}
Status Pop(LinkStack &S,ElemType &e){
	LinkStack p;//定义p 
	if(S==NULL) return ERROR;//栈空 
	e=S->data;//将栈顶元素赋给e 
	p=S;//p临时保存栈顶元素以备释放 
	S=S->next;//修改栈顶指针 
	delete p;//释放空间 
	return OK;
} 
ElemType GetTop(LinkStack S){
	
	if(S!=NULL) //栈非空
	 return S->data; 
} 
LinkStack S; 
int main(void){
	int n,x,i,j;
	ElemType e; 
	InitStack(S); 
	cout<<"链栈简单操作目录:\n"
    	    <<"1.入栈\n"
    	    <<"2.出栈\n"
    	    <<"3.取栈顶元素\n"
    	    <<"4.退出\n";
    while(true){
    	cout<<"请输入目录编号:";
    	cin>>n;
		switch(n){
			case 1:cout<<"请输入要入栈的元素的个数:";
			       cin>>x;
			       cout<<"请依次输入"<<x<<"个数字: " ; 
				   for(i=1;i<=x;i++){
				   	  cin>>e;
				   	  Push(S,e);
				   }break;
			case 2:cout<<"请输入要出栈的元素的个数:" ;
			       cin>>x;
				   cout<<"出栈元素为:";
				   for(i=1;i<=x&&S!=NULL;i++){
				   	   Pop(S,e);
				   	   cout<<e<<" ";
				   }
				   	   cout<<endl;
				    break;
			case 3:if(S==NULL){
				   		cout<<"栈已空"<<endl;break;
					}
			        else{
			        	cout<<"栈顶元素为:";
			       cout<<GetTop(S)<<endl; break;
					}
			        
			case 4:exit(0);
		} 
	}
	return 0;
}

实现效果

在这里插入图片描述

发布了11 篇原创文章 · 获赞 26 · 访问量 4378

猜你喜欢

转载自blog.csdn.net/qq_45918426/article/details/104341490
今日推荐