栈
定义:是一种只能在一端进行插入或删除操作的线性表
主要特点:后进先出
栈有顺序栈和链栈,是基于顺序表或链表的一种数据结构,其实也就是一种和内存打交道的算法的思想和定义的体现
顺序栈
顺序栈就是基于顺序表上而又有特殊定义的数据结构,一块物理上连续的空间
上机课时敲了一个顺序栈的实验作业,本来想按照书上的敲,发现书上的用着不习惯,就自己敲了一段
代码
#include <iostream>
#include <malloc.h>
#define MaxSize 10//定义全局变量
using namespace std;
typedef char ElemType;
typedef struct//声明顺序栈的类型的结构体
{
ElemType data[MaxSize];//存放栈中的数据元素
int top;//栈顶指针,即存放栈顶元素在data数组中的下标
}SqStack;//顺序栈类型
void InitStack(SqStack *&s)//初始化栈
{
s=(SqStack*)malloc(sizeof(SqStack));
s->top=-1;
}
void Push(SqStack *&s,int n)//入栈
{
int i=0;
ElemType a[100];
cout<<"(3)依次近栈元素为:";
while(s->top!=n-1)//判断是否溢出
{
cin>>a[i];
s->top++;
s->data[s->top]=a[i];
i++;
}
}
bool stackEmpty(SqStack*s)//判断顺序栈是否为空
{
return(s->top==-1);
}
void Pop(SqStack*&s)//出栈
{
ElemType e;
cout<<"(6)出栈序列为:";
while(s->top!=-1)//判断栈是否为空
{
e=s->data[s->top];
s->top--;
cout<<e<<" ";
}
cout<<endl;
}
int GetTop(SqStack*&s)//得到栈顶元素
{
ElemType e;
if(s->top==-1)
return 0;
e=s->data[s->top];
cout<<"(5)栈顶元素为:"<<e<<endl;
return 0;
}
void DestroyStack(SqStack*&s)//清空栈
{
cout<<"(8)释放栈"<<endl;
free(s);
}
int main()
{
SqStack *s;//定义指针
int n;
cout<<"请输入入栈元素个数:";
cin>>n;
cout<<"(1)初始化栈S"<<endl;
InitStack(s);
if(stackEmpty(s))
cout<<"(2)栈为空"<<endl;
else
cout<<"(2)栈为非空"<<endl;
Push(s,n);
if(stackEmpty(s))
cout<<"(4)栈为空"<<endl;
else
cout<<"(4)栈为非空"<<endl;
GetTop(s);
Pop(s);
if(stackEmpty(s))
cout<<"(7)栈为空"<<endl;
else
cout<<"(7)栈为非空"<<endl;
DestroyStack(s);
return 0;
}