桂电七院数据结构实验报告三
源代码的调试#include "stdio.h"#define MAXSIZE 100#define TRUE 1#define FALSE 0typedef char datatype;typedef struct {/*顺序栈的结构体类型定义*/datatype stack[MAXSIZE];int top;} seqstack;void setnull(seqstack *s) { //置空
·
源代码的调试
#include "stdio.h"
#define MAXSIZE 100
#define TRUE 1
#define FALSE 0
typedef int datatype;
typedef struct { /*顺序栈的结构体类型定义*/
datatype stack[MAXSIZE];
int top;
} seqstack;
void setnull(seqstack *s) { /*置空栈-由于c语言的数组下标是从0开始的,所以置空栈操作时将栈顶指针放在下标为0之前,即-1处。*/
s->top=-1;
}
int empty(seqstack *s) { /*判断当前栈是否为空栈*/
if(s->top<0)
return TRUE;
else
return FALSE;
}
int push(seqstack *s,datatype x) { /*把元素x压入栈s中*/
if(s->top>=MAXSIZE-1) {
printf("stack overflow!\n"); /*发生上溢*/
return FALSE;
} else {
s->stack[++s->top]=x; /*栈顶指针上移,数据元素入栈*/
return TRUE;
}
}
datatype pop(seqstack *s) { /*弹出当前栈s的栈顶元素*/
if(s->top<0) {
printf("stack empty!\n"); /*栈空,返回空值*/
return NULL;
} else {
s->top--;
return(s->stack[s->top+1]);
}/*由于return语句的特点,必须先使top减1,然后再执行return语句。而此时栈顶元素的表示应该为s->top+1.*/
}
int judge(seqstack *s) { /*括号匹配检查算法。--遇到"("、"["、"{"时,将其压入栈s中。*/
datatype symb,ch,store;
push(s,'#');
symb=getchar();/*从键盘接受字符*/
while(symb!='#') {
switch(symb) {
case '(':
case '[':
case '{':
push(s,symb);
break;
case ')':
ch=pop(s);
if(ch!='(') return FALSE;
break;
case ']':
ch=pop(s);
if(ch!='[') return FALSE;
break;
case '}':
ch=pop(s);
if(ch!='{') return FALSE;
break;
default:
;
}
symb=getchar();
}
if(pop(s)=='#') return TRUE;
else return FALSE;
}
main() {
seqstack q;
setnull(&q);
printf("please input an express end with symbol '#':\n");
if(judge(&q)) printf("yes\n"); /*括号匹配,则输出yes*/
else printf("no\n"); /*括号不匹配,则输出no*/
}
在DEVC++中调试的时候会出现NULLredifined,所以可将定义NULL这一行删去。输入的时候记得输入的是英文括号
假定表达式不是通过getchar()函数一个个传送的,而是存放在一个字符数组A[n]中,程序需要做哪些改变; 在judge()函数中,如果不用switch()函数,你会怎么处理?
#include "stdio.h"
#define MAXSIZE 100
#define TRUE 1
#define FALSE 0
#include<string.h>
#define n 100
typedef int datatype;
typedef struct { /*顺序栈的结构体类型定义*/
datatype stack[MAXSIZE];
int top;
} seqstack;
void setnull(seqstack *s) { /*置空栈-由于c语言的数组下标是从0开始的,所以置空栈操作时将栈顶指针放在下标为0之前,即-1处。*/
s->top=-1;
}
int empty(seqstack *s) { /*判断当前栈是否为空栈*/
if(s->top<0)
return TRUE;
else
return FALSE;
}
int push(seqstack *s,datatype x) { /*把元素x压入栈s中*/
if(s->top>=MAXSIZE-1) {
printf("stack overflow!\n"); /*发生上溢*/
return FALSE;
} else {
s->stack[++s->top]=x; /*栈顶指针上移,数据元素入栈*/
return TRUE;
}
}
datatype pop(seqstack *s) { /*弹出当前栈s的栈顶元素*/
if(s->top<0) {
printf("stack empty!\n"); /*栈空,返回空值*/
return NULL;
} else {
s->top--;
return(s->stack[s->top+1]);
}/*由于return语句的特点,必须先使top减1,然后再执行return语句。而此时栈顶元素的表示应该为s->top+1.*/
}
int judge(seqstack *s) {
datatype symb,ch,store;
char A[n];
gets(A);
push(s,'#');
int i;
for(i=0; A[i]!='#'; i++) {
if (A[i]=='('||A[i]=='['||A[i]=='{')
push(s,A[i]);
if (A[i]==')') {
ch=pop(s);
if(ch!='(') return FALSE;
}
if (A[i]==']') {
ch=pop(s);
if(ch!='[') return FALSE;
}
if (A[i]=='}') {
ch=pop(s);
if(ch!='{') return FALSE;
}
}
if(pop(s)=='#') return TRUE;
else return FALSE;
}
main() {
seqstack q;
setnull(&q);
printf("please input an express end with symbol '#':\n");
if(judge(&q)) printf("yes\n"); /*括号匹配,则输出yes*/
else printf("no\n"); /*括号不匹配,则输出no*/
}
分析思考题
#include "stdio.h"
#define MAXSIZE 100
#define TRUE 1
#define FALSE 0
typedef int datatype;
typedef struct { /*顺序栈的结构体类型定义*/
datatype stack[MAXSIZE];
int top;
} seqstack;
void setnull(seqstack *s) { /*置空栈-由于c语言的数组下标是从0开始的,所以置空栈操作时将栈顶指针放在下标为0之前,即-1处。*/
s->top=-1;
}
int empty(seqstack *s) { /*判断当前栈是否为空栈*/
if(s->top<0)
return TRUE;
else
return FALSE;
}
int push(seqstack *s,datatype x) { /*把元素x压入栈s中*/
if(s->top>=MAXSIZE-1) {
printf("stack overflow!\n"); /*发生上溢*/
return FALSE;
} else {
s->stack[++s->top]=x; /*栈顶指针上移,数据元素入栈*/
return TRUE;
}
}
datatype pop(seqstack *s) { /*弹出当前栈s的栈顶元素*/
if(s->top<0) {
printf("stack empty!\n"); /*栈空,返回空值*/
return NULL;
} else {
s->top--;
return(s->stack[s->top+1]);
}/*由于return语句的特点,必须先使top减1,然后再执行return语句。而此时栈顶元素的表示应该为s->top+1.*/
}
void transform(seqstack *s,int m,int n) {
int x;
while(m!=0) {
int t=m%n;
push(s,t);
m=m/n;
}
while(empty(s)!=TRUE ) {
x=pop(s);
printf("%d",x);
}
}
main() {
char ch;
int m,n;
seqstack q;
setnull(&q);
/*printf("请输入一个十进制数m和要转换的进制数n:\n");*/
scanf("%d %d",&m,&n);
printf("将十进制数%d",m);
printf("转换为%d进制\n",n);
transform(&q,m,n);/*调用进制转换函数进行调用*/
}
由于本人最近有点犯懒癌,而且本次题比较简单,所以直接一块就写了,注释也懒得写了(狗头)
更多推荐
已为社区贡献1条内容
所有评论(0)