数据结构之顺序栈(C++版)

#include <iostream>
#include <stdlib.h>
#define MAXLISTSIZE 100 //预设的存储空间最大容量
using namespace std;
typedef string ElemType;
typedef struct{
ElemType *base; //存储空间基址
int top; //栈顶指针
int stacksize; //允许的最大存储空间以元素为单位
}Stack;

void InitStack(Stack &S);
void DestroyStack(Stack &S);
void Push(Stack &S);
void Pop(Stack &S);
void GetTop(Stack S);
void StackLength(Stack S);
void StackEmpty(Stack S);

int main(void)
{
Stack S;
int z;
cout << "+---------------------------+" << ‘\n‘;
cout << "|----------顺序栈-----------|" << ‘\n‘;
cout << "+---------------------------+" << ‘\n‘;
cout << "提示:为保证您的操作得到保存,请按正常顺序退出系统^_^" << ‘\n‘;
do
{
cout << ‘\n‘ << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"--------------------------------" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ 主菜单 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+--------------------------------" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [1]----顺序栈初始化操作 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [2]----顺序栈的销毁操作 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [3]----顺序栈的入栈操作 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [4]----顺序栈的出栈操作 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [5]----顺序栈取栈顶元素 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [6]----顺序栈求栈长操作 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [7]----顺序栈的判空操作 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [0]----退出系统 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"-----------------------------------" << ‘\n‘;
cout << "请输入您的选择:";
cin >> z;
switch(z)
{
case 0 : break;
case 1 : InitStack(S);break;
case 2 : DestroyStack(S);break;
case 3 : Push(S);break;
case 4 : Pop(S);break;
case 5 : GetTop(S);break;
case 6 : StackLength(S);break;
case 7 : StackEmpty(S);break;
default:cout << "无效选项!" << ‘\n‘;system("pause");
}
}
while(z!= 0);
}

void InitStack (Stack &S)
{
// 构造一个最大存储容量为 maxsize 的空栈 S
int maxsize;
cout << "请输入栈的最大储存容量:";
cin >> maxsize;
if (maxsize == 0)
maxsize = MAXLISTSIZE;
S.base = new ElemType[maxsize];
if (!S.base) exit(1); //存储分配失败
S.stacksize = maxsize;
S.top = 0; //空栈中元素个数为0
system("pause");
}

void Push(Stack &S)
{
ElemType e;
int j, n;
if (S.stacksize == 0)
{
cout << "栈已销毁或栈未初始化,请选择1初始化栈" << endl;
system("pause");
return;
}
if (S.top == S.stacksize)
{
cout << "栈已满,无法进行插入" << endl;
system("pause");
return;
}
cout << "请输入压入栈的元素个数(元素个数必须小于或等于" << S.stacksize - S.top << "):";
cin >> n;
cout << "请输入压入栈的元素:";
for(j = 0; j < n; j++)
{
cin >> e;
*(S.base + S.top) = e; // 插入新的元素 
++S.top; // 栈顶指针后移 
}
system("pause");
}

void Pop(Stack &S)
{
ElemType e;
int j, n;
if (S.stacksize == 0)
{
cout << "栈已销毁或栈未初始化,请选择1初始化栈" << endl;
system("pause");
return;
}
if (S.top == 0)
{
cout << "栈为空,无法出栈" << endl;
system("pause");
return;
}
cout << "请输入出栈的元素个数(出栈元素个数应小于或等于" << S.top << "):";
cin >> n;
cout << "出栈的元素为:";
for(j = 0; j < n; j++)
{
e = *(S.base + S.top-1); // 返回非空栈中栈顶元素
cout << e << ‘ ‘;
--S.top; // 栈顶指针前移
}
cout << endl;
system("pause");
}

void GetTop(Stack S)
{
ElemType e;
if (S.stacksize == 0)
{
cout << "栈已销毁或栈未初始化,请选择1初始化栈" << endl;
system("pause");
return;
}
if (S.top == 0)
{
cout << "栈为空,无法获取栈顶元素" << endl;
system("pause");
return;
}
e = *(S.base + S.top-1); // 返回非空栈中栈顶元素
cout << "栈顶元素为:" << e << endl;
system("pause");
}

void StackEmpty(Stack S)
{
if (S.stacksize == 0)
{
cout << "栈已销毁或栈未初始化,请选择1初始化栈" << endl;
system("pause");
return;
}
if(S.top == 0)
cout << "该顺序栈为空栈" << endl;
else
cout << "该顺序栈不为空栈" << endl;
system("pause");
}

void StackLength(Stack S)
{
if (S.stacksize == 0)
{
cout << "栈已销毁或栈未初始化,请选择1初始化栈" << endl;
system("pause");
return;
}
// 返回S的元素个数,即栈的长度
cout << "栈长为:" << S.top << endl;
system("pause");
}

void DestroyStack(Stack &S)
{
// 销毁栈S,S不再存在
if (S.stacksize == 0)
{
cout << "栈已销毁或栈未初始化,请选择1初始化栈" << endl;
system("pause");
return;
}
delete[] S.base;
S.top = 0;
S.stacksize = 0;
cout << "栈已销毁" << endl;
system("pause");
}

时间: 2024-08-05 13:30:47

数据结构之顺序栈(C++版)的相关文章

浅谈数据结构之顺序栈(三)

栈:是限定仅在表尾进行插入与删除操作的线性表.我们把允许插入与删除的一端称为栈顶,另一端称为栈底,不含任何数据元素的称为空栈.栈的插入操作,叫作进栈,也叫压栈.入栈,类似于子弹入弹夹:栈的删除操作,叫作出栈,也叫弹栈,如同弹夹中的子弹出夹.注意:栈的定义中的"表尾"指的是"栈顶",而不是"栈底". 首先,栈是一个线性表,也就是说:栈具有线性结构,即前驱后继关系:只不过它是一个特殊的线性表而已,它的特殊之处在于限制了这个线性表的插入与删除位置,它始

数据结构之顺序栈基本操作SqStack

顺序栈SqStack 基本操作 1 Status InitStack()//构造一个空栈S 2 Status DestroyStack()//销毁栈S,S不再存在 3 Status ClearStack()//把S置为空栈 4 Status StackEmpty()//若S为空栈,则返回true,否则返回false 5 int StackLength()//返回S的元素个数,即栈的长度 6 Status GetTop(SElemType &e)//若栈不空,则用e返回S的栈顶元素,并返回OK,否

【数据结构之顺序栈的基本运算】

//顺序栈 public class OrderStack { //(1)置空栈 void InitStack(SeqStack *S){ S->top = -1; } //(2)判断栈空 int StackEmpty(SeqStack *S){ return S->top == -1; } //(3)判断栈满 int StackFull(SeqStack *S){ return S->top == StackSize-1; } //(4)进栈 void push(S,x){ if(St

数据结构库——顺序栈的概念及实现

1,栈的定义: 1,栈是一种特殊的线性表: 2,栈仅能在线性表的一端进行操作: 1,栈顶(Top):允许操作的一端: 2,栈底(Bottom):不允许操作的一端: 2,栈的特性: 1,后进先出(Last In First Out)(只有一个特性): 3,栈的操作(创销进出顶大清): 1,创建栈(Stack()): 2,销毁栈(~Stack()): 3,进栈(push()): 4,出栈(pop()): 5,获取栈顶元素(top()): 6,获取栈的大小(size()): 7,清空栈(clear()

数据结构:顺序栈

这是严蔚敏吴伟民版本的算法,感觉没<大话数据结构>里面的简单易懂 这个版本里面的top指针指向下一个空单元格,这个其实是有些问题的,因为栈满的时候,top是指向栈外的,有些不安全. 1 #ifndef SQ_STACK_HEAD 2 #define SQ_STACK_HEAD 3 #include <stdio.h> 4 #include <stdlib.h> 5 #define Status int 6 #define OVERFLOW -1 7 #define OK

【数据结构】顺序栈的实现(c++)

头文件: #pragma once #include <iostream> #include <assert.h> using namespace std; template<class Type> class SeqStack { public: SeqStack(size_t sz = INIT_SZ); ~SeqStack(); public: bool empty()const; bool full()const; void show()const; bool

数据结构之顺序表(C++版)

#include <iostream>#include <stdlib.h>#define MAXLISTSIZE 100 //预设的存储空间最大容量 using namespace std; typedef string ElemType;typedef struct{ ElemType *elem; //存储空间基址 int length; //当前长度 int listsize; //允许的最大存储容量(以sizeof(ElemType)为单位)}SqList; //俗称顺序

【数据结构】顺序栈

#include <STDIO.H> #include <STRING.H> #include <STDLIB.H> typedef struct SeqStack { int length; int top; char *data; }seqstack; seqstack* CreatStack(seqstack *s,int n) { s=(seqstack *)malloc(sizeof(seqstack)+n*sizeof(char)); if(s==NULL)

顺序栈的总结

基本数据结构之-顺序栈 栈是一种先进后出的数据结构,我们可以使用一个数组来模拟栈的这种结构,将数组的尾部当做栈的栈顶似乎是一个不错的选择(插入和移除元素是不涉及到数据的移动),也可以很好的控制数组的长度,和数据的进栈和出栈! 首先先解析一下顺序栈的数据结构 1 需要一个数据域来存储数据 考虑到可能存储自定义的数据类型,所以我们选择存储每个数据的开始的地址 (void **stack) 2 需要一个值来记录当前的数据域的长度 (size) 3 需要一个值来记录当前的容器的长度 typedef st