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;
}