数据结构实验3栈和队列 下载本文

《数据结构》实验(三)

实验目的:

1、 掌握栈的顺序存储结构的特点及算法描述。 2、 掌握顺序栈的基本操作实现,熟悉应用方法。 3、 掌握队列顺序存储结构的特点及算法描述

4、 掌握顺序队列基本操作的实现,熟悉应用的方法。 实验课时:4课时 实验内容

1、 在键盘上接收一串带括号的字符串 ,判断括号是否匹配,如果匹配,输出正确,如果不匹配,输出第一对不匹配的括号,并显示错误。例如: {p{p}) 输出 { and } { and ) error error

具体程序如下,请同学们仔细阅读,并在提示下,在有下划线的地方填上程序, #include \#include \

void initstack(SEQSTACK *s) /*顺序栈初始化*/ { s->top = 0; }

DATATYPE1 sempty(SEQSTACK *s) /*判栈空*/ { if(s->top== 0) return 1; else return 0; }

int push(SEQSTACK *s, DATATYPE1 x) /*元素x入栈*/

{ if(s->top == MAXSIZE - 1) {printf(\栈满\\n\ return 0;} else {s->top++; (s->data)[s->top] = x; return 1;} }

DATATYPE1 pop(SEQSTACK *s) /*返回栈顶元素并删除栈顶元素*/ {DATATYPE1 x;

if(s->top == 0) { x = 0;}

else {x = (s->data)[s->top]; s->top--;} return x; }

DATATYPE1 gettop(SEQSTACK *s) /*返回栈顶元素*/ {DATATYPE1 x;

if(s->top == 0) {printf(\栈空\\n\ x = 0;} else x = (s->data)[s->top]; return x; }

void check(SEQSTACK *s) {

char ch,dh;

printf(\请输入一串括号,回车键结束 :\ ch = getchar(); while(ch != '\\n')

{ if(ch=='('||ch=='['||ch=='{') //如果遇到左括号 {

push(s,ch); //把左括号入栈 }

if(ch==')'||ch==']'||ch=='}') //如果遇到右括号 { //出栈,并把出栈的值赋给变量dh if(sempty(s)) //如果栈为空 { printf(\缺失左括号!\ break; //跳出循环 }

dh=pop(s); printf(\和%c\\n\

if(ch=='('&&dh!=\//如果dh和ch不匹配 { printf(\括号匹配错误\\n\ break; //跳出循环 } }

ch = getchar();

} /*继续处理*/

if(ch=='\\n' && sempty(s)) //如果字符串结束并且栈为空 printf(\括号配对正确\\n\

if(sempty(s)==0) //如果栈不为空 printf(\缺失右括号\\n\}

main() {

SEQSTACK st, *s; s = &st; initstack(s);

check(s); }

2、添加一个函数dTOb(),利用栈的原理实现十进制转换成二进制。 #define DATATYPE1 int #include \#include \

#define MAXSIZE 100 typedef struct

{ DATATYPE1 data[MAXSIZE]; int top; }SEQSTACK;

void initstack(SEQSTACK *s) /*初始化空栈*/ { s->top = 0; }

int empty(SEQSTACK *s) /*判栈空*/ { if(s->top == 0) return 1; else return 0; }

int push(SEQSTACK *s, DATATYPE1 x) /*进栈*/ { if(s->top == MAXSIZE - 1) { printf(\ return 0; } else {s->top++; s->data[s->top] = x; return 1; } }

DATATYPE1 pop(SEQSTACK *s) /*出栈*/ { DATATYPE1 x;

if(empty(s)) { printf(\ x = NULL; } else { x = (s->data)[s->top]; s->top--; } return x; }

int stacklen(SEQSTACK *s) /*计算栈中元素个数*/ { return(s->top ); }

void output_stack(SEQSTACK *s) /*输出栈中元素*/ {int i;

printf(\

for(i=1;i<=s->top;i++)