您的位置:首页 > 编程语言 > C语言/C++

C++顺序栈

2015-10-06 19:45 555 查看
SeqStack:

//顺序栈
#include<iostream>
using namespace std;
typedef int elemType;
const int MAXSIZE = 50;

struct SqStack
{
elemType data[MAXSIZE];
elemType top;
};

//初始化栈
void InitStack(SqStack *S)
{
for(int i=0;i<MAXSIZE;i++)
{
S->data[i] = 0;
}
S->top = -1;
}

//获取栈的长度
int LengthStack(SqStack *S)
{
int length = 0;
if(S->top = -1)
return 0;
int i = S->top;
while(i>=0)
{
i--;
length++;
}
return length;
}

//自顶向下遍历栈
void TraverseStack(SqStack *S)
{
if(S->top == -1)
cout<<"栈为空."<<endl;
int num = S->top;
int i = 1;
while(num>=0)
{
cout << i <<":\t"<< S->data[num] <<endl;
i++;
num--;
}
}

//获取栈顶元素
int GetTop(SqStack *S)
{
if(S->top == -1)
{
cout <<"栈为空."<<endl;
return false;
}
elemType e = S->data[S->top];
return e;
}

//插入元素为e的新的栈顶元素
bool Push(SqStack *S, elemType e)
{
if(S->top == MAXSIZE-1)
{
cout<<"栈已满."<<endl;
return false;
}
S->top++;
S->data[S->top] = e;
return true;
}

//删除栈顶元素
bool Pop(SqStack *S, elemType e)
{
if(S->top == -1)
{
cout <<"栈为空."<<endl;
return false;
}
e = S->data[S->top];
S->data[S->top] = 0;
S->top--;
return true;
}

//判断是否为空
void EmptyStack(SqStack *S)
{
if(S->top == -1)
cout <<"栈为空."<<endl;
else
cout<<"栈不为空."<<endl;
}

//清空栈
void ClearStack(SqStack *S)
{
if(S->top == -1)
cout <<"栈已为空."<<endl;
for(int i=S->top;i>=0;i--)
S->data[i] = 0;
S->top = -1;
}

int main()
{
SqStack s;
InitStack(&s);
for(int i=1;i<7;i++)
Push(&s,i);
TraverseStack(&s);
cout<<endl;

elemType x = GetTop(&s);
cout<<"栈顶元素为: "<< x <<endl;
elemType i=0;;
Pop(&s, i);
cout<<"删除栈顶元素后栈为:"<<endl;
TraverseStack(&s);
cout<<endl;

ClearStack(&s);
cout<<"清空栈..."<<endl;
TraverseStack(&s);
EmptyStack(&s);
cout<<endl;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: