数据结构-----栈

#include<iostream>
#include<bits/stdc++.h>
#include<stdlib.h>
using namespace std;
#define MAXSIZE 8
int a=0;
typedef struct
{
	int *base;//栈底指针; 
	int *top;//栈顶指针; 
	int stacksize;//栈可用的最大容量; 
}SqStack;
//顺序栈的初始化。 
int InitStack(SqStack &S) //栈的初始化,构造一个空栈s。
{
	cout<<"即将构造一个空的顺序栈!"<<endl;
	//为顺序栈分配一个最大容量的空间;
	S.base=new int[MAXSIZE];
	//s.base不为空时,分配失败;不能构造空栈
	if(!S.base)exit(OVERFLOW);
	//初始化时为空栈,所以栈顶与栈底初始为同一地方 ;
	S.top=S.base;
	cout<<"初始化成功!"<<endl; 
	S.stacksize=MAXSIZE;
	cout<<"构造完毕!"<<endl; 
	return 1;
} 
//入栈
int Push(SqStack &S,int e)//插入元素为e的栈顶元素;
{
	//判断是否栈满。 
	if(S.top-S.base==S.stacksize) 
	{
		cout<<"栈满,插入失败!"<<endl;
		return 0;
	}
	//元素e压入栈顶,栈顶指针加1; 
	*S.top++=e;
	cout<<"插入成功!"<<endl;
	//int a=1;
	a++;
	cout<<"当前栈中元素有"<<a<<"个!"<<endl; 
	return 1;	
 }
 //出栈
 int Pop(SqStack &S,int e)//删除栈顶元素,用e返回其值; 
{
	//若为空栈,则删除失败。 
	if(S.top==S.base)
	{
		cout<<"删除失败!"<<endl;
		//return ERROR; 
	}
	//否则,栈顶指针减去1,并赋给e; 
	e=*--S.top;
	cout<<"删除成功!"<<endl;
	return 1; 
 } 
 //取栈栈顶元素
 int GetTop(SqStack S)//返回栈顶元素,不修改栈顶指针 
 {
 	//栈非空; 
 	if(S.top!=S.base)
	//返回栈顶元素的值,栈顶指针不变;
	cout<<"操作成功!"<<endl; 
	return *(S.top-1); 
 }
 int main()
 {
 	int e;
 	SqStack S;
 	InitStack(S);
 	cout<<"请输入要入栈的个数:"<<endl;
 	int a1;
 	cin>>a1;
	for(int i=0;i<a1;i++)
	{
		cin>>e;	
		Push(S,e);  
	 }
	 cout<<"请输入要出栈的个数:"<<endl;
	 int a2;
	 cin>>a2;
	 if(a2<a1)
	{
		  for(int i=0;i<a2;i++)
		{
			Pop(S,e);
		 	a--;
		 	cout<<"当前栈中元素有:"<<a<<"个!"<<endl; 
		} 
 	
	 }
	 else
	 {
	 	cout<<"栈中没有"<<a2<<"种元素"<<endl; 
	 }
	 cout<<"栈顶元素为"<<--*S.top<<endl; 
	 GetTop(S);
 }
 

总结
OMG,忍不住吐槽一句,我终于写出来了!!!
时间是验证真理的唯一标准,尽管这次是按照课本写的,但也让我向数据结构的大门迈进了一个脚指头(大笑)。
第一次写需要注意的是要缕清思路,明白第一步要干什么,第二步要干什么,一步一步来,才能稳扎稳打。
对于顺序栈,首先当然是先要初始化分配内存啦,这也是我第一次在C++中使用new这个函数;之前不知道怎么用的,顺便百度学习一下,下面是具体的使用方法;
new函数使用方法

S.base=new int[MAXSIZE];
> 1. new( ) 分配这种类型的一个大小的内存空间,并以括号中的值来初始化这个变量;
2. new[ ] 分配这种类型的n个大小的内存空间,并用默认构造函数来初始化这些变量; 

接下来就是对栈进行一些操作来满足需求;在这需要注意的是,因为是顺序栈,最大空间容量受限制,虽然可以重新分配空间,但工作量大,不如用链栈(这是下一节要学的·)。所以,在每次操作前应该判断是否栈满栈空。
如何判断栈满和栈空呢
说明:base为栈底指针;
top为栈顶指针;
MAXSIZE为最大空间容量,也是stacksize;
1.判断栈满
了解的都知道,栈满的时候,栈顶-栈底=最大空间容量。
所以:

S.top-S.base==S.stacksize//这种情况为栈满,

2.判断栈空
栈空的时候,栈底与栈顶指向同一地方。即:

S.top==S.base//栈空;

暂时就这么多,感谢亲爱的某学长!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值