⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lianzhan.cpp

📁 链栈实现栈的基本操作
💻 CPP
字号:
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
#include <stdio.h>
#include <stdlib.h>

#define STACK_INIT_SIZE 100;           //存储空间初始分配量
#define STACKINCREMENT  10;            //存储空间分配增量
 
typedef int ElemType; 
typedef struct linknode 
{ 
int    data; 
struct linknode *next; 
}LiStack; 
void InitStack(LiStack *&s);         //初始化栈 
void DestroyStack(LiStack *&s);      //摧毁栈 
void ClearStack(LiStack *&s);        //清空栈 
int  StackLength(LiStack *s);        //返回栈的长度 
void StackEmpty(LiStack *s);         //判断栈是否为空 
void Push(LiStack *&s,ElemType e);   //进栈 
int  Pop(LiStack *&s,ElemType e);    //出栈 
int  GetTop(LiStack *s,ElemType e);  //取栈顶元素 
void DispStack(LiStack *s);          //显示栈中元素值  

void InitStack(LiStack *&s)          //初始化栈 
{ 
	s=new LiStack; 
	s->next=NULL; 
} 

void ClearStack(LiStack *&s)         //清空栈 
{ 
	s->next=NULL; 
} 

void DestroyStack(LiStack *&s)       //销毁栈 
{ 
	delete s;
    cout<<"栈已销毁"<<endl;
    exit(0); 
}

int StackLength(LiStack *s)//返回栈的长度 
{ 
    int i=0; 
    for(LiStack *p=s->next;p;p=p->next) 
    i++; 
    cout<<"元素个数为"<<i;
    return i;
} 

void  StackEmpty(LiStack *s)//判断栈是否为空 
{ 
if(s->next==NULL)
cout<<"为空栈"<<endl;
else
cout<<"非空"<<endl;
 
} 

void Push(LiStack *&s,ElemType e)//进栈 
{ 
LiStack *p=new LiStack; 
p->data=e; 
p->next=s->next; 
s->next=p; 
} 

int Pop(LiStack *&s,ElemType e)//出栈 
{ 
LiStack *p; 
if(s->next==NULL) 
return 0; 
p=s->next; 
e=p->data; 
s->next=p->next; 
delete p; 
return 1; 

} 
int GetTop(LiStack *s,ElemType e)//取栈顶元素 
{ 
if(s->next==NULL) 
return 0; 
e=s->next->data;
cout<<"栈顶元素是"<<e<<endl; 
return 1; 
} 
void DispStack(LiStack *s)//显示栈中元素值 
{ 
LiStack *p=s->next; 
for(;p;p=p->next) 
cout<<p->data<<" "; 
cout<<endl; 

} 
void main()
{
	LiStack *s;
	InitStack(s);
	Push(s,1);
    Push(s,2);
    Push(s,3);
	Push(s,4);
    Push(s,5);
	cout<<"栈内元素:";DispStack(s);
	cout<<endl;
	cout<<"  输入要进行操作的序号"<<endl
		<<"1 插入栈顶元素"<<endl
		<<"2 删除栈顶元素"<<endl
		<<"3 输出栈顶元素"<<endl
		<<"4 输出栈内元素"<<endl
		<<"5 清空栈"<<endl
		<<"6 销毁栈"<<endl
		<<"7 输出栈中元素个数"<<endl
	    <<"8 判断是否为空栈"<<endl;
    int a,e;
	char m='y';
	while(m=='y')
	{
       cin>>a;
       switch(a)
	   {
         case 1: cout<<"输入要插入的数:";
                 cin>>e;
                 Push(s,e);
                 cout<<"栈内元素:";DispStack(s);
                 break;
              
         case 2: Pop(s,e);
                 cout<<"栈内元素:";DispStack(s);
                 break;
               
         case 3: GetTop(s,e);
                 cout<<"栈内元素:";DispStack(s);
                 break;
               
	     case 4: cout<<"栈内元素:";DispStack(s);
                 break;
			 
	     case 5: ClearStack(s);
		         break;
		 
		 case 6:DestroyStack(s);
			     break;

	     case 7: StackLength(s);
		         break;
		 case 8: StackEmpty(s);
		         break;
		 default: exit(0);
    }
	cout<<"继续请按y,退出请按任意键";
	cin>>m;
	}
    getch();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -