#define DATATYPE char #define MAXSIZE 100 #include<stdio.h> typedef struct{ DATATYPE data[MAXSIZE]; int top; }SEQSTACK; void InitStack(SEQSTACK *S) { S->top=-1; } void Push(SEQSTACK *S,DATATYPE x) { if(S->top==MAXSIZE-1) printf("栈已满!"); else {S->top++; S->data[S->top]=x; } } DATATYPE Pop(SEQSTACK *S) { DATATYPE x; if(S->top==-1){ printf("栈空!"); return '#'; } else x=S->data[S->top]; S->top--; return x; } int main() { char kh[MAX_SIZE]; printf("请输入一个小括号组成的字符串(长度不超过20):"); scanf("%s", kh); Stack stack; init(&stack); int i; for (i = 0; kh[i] != '\0'; i++) { char ch = kh[i]; if (ch == '(') { push(&stack, ch); } else if (ch == ')') { if (isEmpty(&stack)) { printf("右括号多于左括号\n"); exit(1); } pop(&stack); } else { printf("字符串存在非法字符:%c\n", ch); exit(1); } } if (!isEmpty(&stack)) { printf("左括号多于右括号\n"); exit(1); } printf("括号匹配正确\n"); return 0; }
时间: 2023-06-16 13:07:53 浏览: 197
这是一个使用栈来判断括号匹配的程序。程序中定义了一个常量 MAXSIZE 和一个数据类型 DATATYPE ,并利用 typedef 定义了一个名为 SEQSTACK 的结构体,该结构体中有一个 char 类型的数组和一个整型的 top 变量,用来表示栈的存储和栈顶指针。
程序中实现了栈的初始化、入栈、出栈等基本操作。主函数中读入一个小括号组成的字符串,利用栈来判断括号是否匹配。如果遇到左括号则将其入栈,遇到右括号则将其与栈顶元素进行匹配。如果匹配则将栈顶元素出栈,否则说明括号不匹配,程序退出。
需要注意的是,程序中还要判断输入字符串中是否存在非法字符,以及左右括号是否数量匹配。如果存在以上情况则程序会退出。
相关问题
优化这段代码#include<stdio.h> #include<stdlib.h> #include<malloc.h> #include<conio.h> #define OK 1 #define error 0 #define MVNum 100 #define MAXSIZE 10 typedef int OtherInfo,QElemtype; typedef char VerTexType; //结构体定义 typedef struct ArcNode{ int adjvex;
首先,该段代码中包含了一些不必要的头文件,例如:conio.h,malloc.h等。建议只保留stdio.h和stdlib.h。
其次,可以将#define OK 1和#define error 0替换为枚举类型,使代码更加清晰易读。
最后,在结构体定义中,可以将OtherInfo和QElemtype合并为一个类型,避免定义过多类型。同时,也可以将结构体中的变量类型进行优化,例如将int类型的adjvex改为short或者char类型。
重构后的代码如下所示:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100
#define MAX_ARC_NUM 10
typedef enum {
ERROR = 0,
OK = 1
} Status;
typedef char VertexType;
typedef int ArcType;
typedef struct ArcNode {
int adjvex;
struct ArcNode* nextarc;
ArcType* info;
} ArcNode;
typedef struct VNode {
VertexType data;
ArcNode* firstarc;
} VNode, AdjList[MAX_VERTEX_NUM];
typedef struct {
AdjList vertices;
int vexnum, arcnum;
} ALGraph;
```
希望可以帮到你。
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef int ElemType; typedef struct
这段代码是C语言中的头文件引用和一些定义的示例。其中,`#include <stdio.h>`和`#include <stdlib.h>`是用来引入标准库函数的头文件。`stdio.h`包含了输入输出相关的函数,如`printf`和`scanf`;`stdlib.h`包含了一些常用的函数,如内存分配函数`malloc`和随机数生成函数`rand`。
`#define MAXSIZE 100`是一个宏定义,用来定义一个常量`MAXSIZE`,它的值为100。
`typedef int ElemType;`是用来给`int`类型起一个别名`ElemType`,方便在代码中使用。
至于代码中的结构体部分,由于你没有提供完整的代码,所以无法给出具体的解释。但一般来说,结构体用于定义一种自定义的数据类型,可以包含多个不同类型的成员变量。
阅读全文