#include <stdio.h> #include <stdlib.h> typedef int DataType; struct Node { DataType data; struct Node* next; }; typedef struct Node *PNode; typedef struct Node *LinkStack; LinkStack SetNullStack_Link() { LinkStack top = (LinkStack)malloc(sizeof(struct Node)); if (top != NULL) top->next = NULL; else printf("Alloc failure"); return top; } int IsNullStack_link(LinkStack top) { if (top->next == NULL) return 1; else return 0; } void Push_link(LinkStack top, DataType x) { PNode p; p = (PNode)malloc(sizeof(struct Node)); if (p == NULL) printf("Alloc failure"); else { p->data = x; p->next = top->next; top->next = p; } } void Pop_link(LinkStack top) { PNode p; if (top->next == NULL) printf("it is empty stack!"); else { p = top->next; top->next = p->next; free(p); } } DataType Top_link(LinkStack top) { if (top->next == NULL) { printf("It is empty stack!"); return 0; } else return top->next->data; } void BracketMatch(LinkStack top) { int flag = 1; char ch, temp; scanf("%c", &ch); while (ch != '#') { switch (ch) { case '[': case '(': push(top,ch) ; break ; case ')': if ( ) Pop_link(top); else flag = 0; break; case ']': if ( ) Pop_link(top); else flag = 0; break; }//swith scanf("%c", &ch); }//while if ( ) printf("no!"); else printf("yes!"); } int main() { LinkStack mystack = NULL; mystack = SetNullStack_Link(); BracketMatch(mystack); return 0; }
时间: 2024-01-31 07:03:48 浏览: 135
这段代码中,定义了一个链栈的数据结构,然后实现了栈的基本操作:初始化、判断栈是否为空、入栈、出栈、获取栈顶元素。
在 BracketMatch 函数中,使用了栈来判断输入的字符串中的括号是否匹配。首先从输入中读取一个字符,如果是左括号([或(),则将其入栈;如果是右括号(]或)),则判断栈顶元素是否为匹配的左括号,若匹配则将栈顶元素出栈,继续向后读取字符;若不匹配则标记为不匹配,退出循环。最后判断栈是否为空,若为空则说明括号匹配,否则不匹配。
这段代码中还有一些问题,例如 switch 语句中的 push 函数应该是 Push_link;括号匹配的判断条件应该是栈顶元素为匹配的左括号,而不是右括号。同时,代码中没有释放申请的内存,需要注意内存泄漏的问题。
相关问题
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef int DataType; #define QUEUESIZE 100 /* 队列的最大长度 */ /* 循环队列的定义 */ typedef struct { DataType items[QUEUESIZE]; int front,rear; /* 队头、队尾指针 */ }SqQueue; int InitSqQueue(SqQueue *Q)
这段代码只给出了函数声明,缺少函数实现部分。我假设这是一个初始化循环队列的函数,那么可以参考下面的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int DataType;
#define QUEUESIZE 100 /* 队列的最大长度 */
/* 循环队列的定义 */
typedef struct {
DataType items[QUEUESIZE];
int front, rear; /* 队头、队尾指针 */
} SqQueue;
/* 初始化循环队列 */
int InitSqQueue(SqQueue *Q) {
memset(Q->items, 0, sizeof(Q->items)); // 将队列元素初始化为0
Q->front = Q->rear = 0; // 初始化队头、队尾指针为0
return 1; // 初始化成功,返回1
}
```
在该函数中,我们使用了`memset`函数将队列元素初始化为0,使用`Q->front = Q->rear = 0`初始化队头、队尾指针为0。最后返回1表示初始化成功。
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef int DataType; void print(BiTree tree); BiTree CreatBiTree(); typedef struct Node{ DataType data; struct Node *LChild; struct Node *RChild; }BiTNode,* BiTree; void print(BiTree tree) { if(tree){ printf(tree->LChild); printf("%d",tree->data); printf(tree->RChild); } } BiTree CreatBiTree() { char ch; if(ch=='#') return NULL; else{ BiTree Node=((Node *)malloc(Node)); Node->LChild=CreatBiTree(); Node->data=ch; Node->RChild=CreatBiTree(); } } int main() { BiTree tree=NULL; tree=CreatBiTree(); print(tree); return 0; }找错误
这段代码中存在以下几个错误:
1. 缺少头文件定义,应该添加头文件:`#include "stdlib.h"`和`#include "string.h"`。
2. `BiTree`的定义应该在函数之前。
3. `CreatBiTree`函数中缺少输入,应该在函数内部添加一个读取输入字符的语句,例如:`scanf("%c",&ch);`。
4. 在`CreatBiTree`函数中,分配内存的语句应该是`Node=((BiTree)malloc(sizeof(BiTNode)));`,而不是`Node=((Node *)malloc(Node));`。
5. `print`函数中应该打印`tree->LChild`和`tree->RChild`的数据,而不是直接打印指针地址。应该改成:`print(tree->LChild); printf("%d",tree->data); print(tree->RChild);`。
下面是修改后的代码:
```
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef int DataType;
typedef struct Node{
DataType data;
struct Node *LChild;
struct Node *RChild;
} BiTNode,* BiTree;
BiTree CreatBiTree();
void print(BiTree tree);
void print(BiTree tree) {
if(tree){
print(tree->LChild);
printf("%d",tree->data);
print(tree->RChild);
}
}
BiTree CreatBiTree() {
char ch;
scanf("%c",&ch);
if(ch=='#')
return NULL;
else{
BiTree Node=((BiTree)malloc(sizeof(BiTNode)));
Node->LChild=CreatBiTree();
Node->data=ch;
Node->RChild=CreatBiTree();
return Node;
}
}
int main() {
BiTree tree=NULL;
tree=CreatBiTree();
print(tree);
return 0;
}
```
阅读全文