数据结构栈的应用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构》实验报告

实验序号:4 实验项目名称:栈的操作

附源程序清单:

1.

#include

#define MaxSize 100

using namespace std;

typedef char ElemType;

typedef struct

{

ElemType data[MaxSize];

int top;

}SqStack;

void InitStack(SqStack *st) //初始化栈

{

st->top=-1;

}

int StackEmpty(SqStack *st) //判断栈为空{

return (st->top==-1);

}

void Push(SqStack *st,ElemType x) //元素进栈{

if(st->top==MaxSize-1)

{

printf("栈上溢出!\n");

}

else

{

st->top++; //移动栈顶位置

st->data[st->top]=x; //元素进栈

}

}

void Pop(SqStack *st,ElemType *e) //出栈

{

if(st->top==-1)

{

printf("栈下溢出\n");

}

else

{

*e=st->data[st->top]; //元素出栈

st->top--; //移动栈顶位置

}

}

int main()

{

SqStack L;

SqStack *st=&L;

ElemType e,a[MaxSize];

int i,j=1,k;

do{

InitStack(st);

gets(a);

for(i=0;a[i]!='\0';i++)

{

if(a[i]=='('||a[i]=='{'||a[i]=='[') //左括号入栈Push(st,a[i]);

if(a[i]==')')

{

if(StackEmpty(st) ==1)//判断栈是否为空

{

printf("多了“(”,不匹配\n");

break;

}

else

if('('==st->data [st->top ])//匹配成功出栈

Pop(st,&e);

else

{

printf("%c不匹配\n",a[i]);

break;

}

}

if(a[i]=='}')

{

if(StackEmpty(st) ==1)//判断栈是否为空

{

printf("多了“}”,不匹配\n");

break;

}

else

if('{'==st->data [st->top ])//匹配成功出栈

Pop(st,&e);

else

{

printf("%c不匹配\n",a[i]);

break;

}

}

if(a[i]==']')

{

if(StackEmpty(st) ==1) //判断栈是否为空

{

printf("多了“]”,不匹配\n");

break;

}

else

if('['==st->data [st->top ])//匹配成功出栈

Pop(st,&e);

else

{

printf("%c不匹配\n",a[i]);

break;

}

}

}

if(st->top ==-1)

printf("匹配成功\n");

else

printf("匹配不成功,多了%c。\n",st->data [st->top ]);

printf("是否继续匹配括号:(继续不要按“#”)\n");

scanf("%c",&e);

k=getchar();//这是为了输入e时会敲回车键而加上去的

}while(e!='#');

}

2.(1)

#include //引入栈

using namespace std;

int main()

{

int a,i;

char b[50];

stacks;//声明了一个char型的栈,括号里面的可以改为任何基本类型

gets(b);

for(i=0;b[i]!='\0';i++)

{

if(b[i]=='('||b[i]=='[')

{

s.push(b[i]);

}//如果为"("或者是"[",就入栈

if(b[i]==')')

{

if(s.empty()==1 )//s.empty是判断函数,若无栈顶元素就会返回1,表明栈为空,否则就会返回0

{

printf("不匹配\n");

break;

}

if(s.top()=='(')//判断是否符合出栈的条件

{

s.pop() ;//匹配就会出栈

}

else

{

printf("不匹配\n");

break;

}

}

if(b[i]==']')

{

相关文档
最新文档