12.线性表之数组栈的基本操作

HELLO大家好,我是Jhonson。今天是2015年11月4号。今天同学过生日受邀去了她家吃饭,第一次去女同学家吃饭。还好此时没过12点,祝她生日快乐啦。

貌似昨天没有更新博客,今天来好好的写下今天的博客。

今天给大家继续带来线性表之数组栈的基本操作。

栈作为LIFO特殊的线性表,在某些特殊的场合有其强大的作用,比如括号匹配,迷宫,递归等。所以今天将基本操作代码贴下来

// 数组 栈.cpp : Defines the entry point for the console application.
//


#include "stdafx.h"
#include "iostream.h"
#include <stdio.h>
#include "stdlib.h"
#define STACKSIZE 5
typedef int DataType;
#define FALSE 0
#define TRUE 1
typedef struct 
{
DataType data[STACKSIZE];
int top;
}SeqStack;


void InitStack(SeqStack &s);//建立数组栈
void Push(SeqStack &s,DataType x);//数组进栈
int StackEmpty(SeqStack s);//数组栈判空
int StackFull(SeqStack s);//数组栈判满
void GetTop(SeqStack s,DataType &x);//取栈顶元素
void Pop(SeqStack &s,DataType &x);//弹栈


//void DestoryStack(&s);若栈存在,销毁栈
//void ClearStack(&s);将栈清空
//int StackLength(s);返回栈s中元素的个数






void InitStack(SeqStack &s)
{
s.top=-1;//因为是数组,所以用.运算符,有些资料书接受用SeqStack *s,要改SeqStack *s;
}


void Push(SeqStack &s,DataType x)
{
if(s.top==STACKSIZE-1)
cout<<"栈已满,无法入栈!";
else 
{
s.top++;
s.data[s.top]=x;
}
}


int StackEmpty(SeqStack s)
{
if(s.top==-1)
return TRUE;
else 
return FALSE;
}


int StackFull(SeqStack s)
{
if(s.top+1==STACKSIZE)
return TRUE;
else 
return FALSE;
}


void GetTop(SeqStack s,DataType &x)
{
if(s.top==-1)
cout<<"栈为空";
else 
x=s.data[s.top];
}


void Pop(SeqStack &s,DataType &x)
{
if(s.top==-1)
cout<<"栈为空";
else 
{
x=s.data[s.top];
s.top--;
}
}
int main(int argc, char* argv[])
{
int i,n;
DataType value;
SeqStack s;
Menu: cout<<"\t数组栈基本操作"<<endl;
cout<<"\t1.InitStack(s);\t2.Push(s,value);"<<endl;
cout<<"\t3.StackEmpty(s);\t4.StackFull(s);"<<endl;
cout<<"\t5.GetTop(s,value);\t6.Pop(s,value);"<<endl;
cout<<"\t请选择:";
cin>>n;
switch(n)
{
case 1:
InitStack(s);
system("cls");
goto Menu;
break;
case 2:
cout<<"请输入进栈的数目:";
cin>>n;
cout<<"请输入"<<n<<"个数";
for(i=0;i<n;i++)
{
cin>>value;
Push(s,value);
}
system("cls");
goto Menu;
break;
case 3:
if(!StackEmpty(s))
cout<<"栈不空";
else 
cout<<"栈为空";
system("cls");
goto Menu;
break;
case 4:
if(!StackFull(s))
cout<<"栈不满";
else 
cout<<"栈已满";
system("cls");
goto Menu;
break;
case 5:
GetTop(s,value);
cout<<"栈顶元素是:"<<value;
system("cls");
goto Menu;
break;
case 6:
while(!StackEmpty(s))
{
Pop(s,value);
cout<<value<<" ";
}
system("cls");
goto Menu;
break;
}
return 0;
}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值