数据结构——链栈(附基本的括号匹配)
来源:互联网 发布:连云港网站建设优化 编辑:程序博客网 时间:2024/05/14 19:34
三个文件。
链栈操作在头文件里,可以看注释实现功能。
linkstack.h文件内容如下
#ifndef LINKSTACK_H#define LINKSTACK_Htypedef int DataType;struct Node{ DataType info; struct Node *link;};typedef struct Node *PNode;struct LinkStack{ PNode top;};typedef struct LinkStack *PLinkStack;PLinkStack createEmptyStack_link(); // 创建空栈int isEmptyStack_link(PLinkStack plstack); // 判断是否为空void push_link(PLinkStack plstack, DataType x); // 进栈void pop_link(PLinkStack plstack); // 出栈DataType top_link(PLinkStack plstack); // 取栈顶元素void print(PLinkStack plstack); // 链栈的打印#endif
linkstack.c文件内容如下,包括链栈的操作:
#include <stdio.h>#include <stdlib.h>#include "linkstack.h"// 创建空栈PLinkStack createEmptyStack_link(){ PLinkStack plstack; plstack = (PLinkStack)malloc(sizeof(struct LinkStack)); if (plstack != NULL) { plstack->top = NULL; } else { printf("out of space!\n"); } return plstack;}// 判断栈是否为空int isEmptyStack_link(PLinkStack plstack){ return (plstack->top == NULL);}// 进栈void push_link(PLinkStack plstack, DataType x){ PNode p; p = (PNode)malloc(sizeof(struct Node)); if (p == NULL) { printf("out of space!\n"); } else { p->info = x; p->link = plstack->top; plstack->top = p; }}// 出栈void pop_link(PLinkStack plstack){ PNode p; if (isEmptyStack_link(plstack)) { printf("Empty stack pop\n"); } else { p = plstack->top; plstack->top = plstack->top->link; free(p); }}// 取栈顶元素DataType top_link(PLinkStack plstack){ return plstack->top->info;}// 链栈的打印void print(PLinkStack plstack){ PNode p = NULL; p = plstack->top; if(isEmptyStack_link(plstack)) { printf("Empty stack pop\n"); exit(0); } while(p->info != NULL) { printf("%d\t", p->info); if (p->link != NULL) p = p->link; else { printf("\n"); break; } }}
最后main.c的文件内容如下:
#include <stdio.h>#include <stdlib.h>#include "linkstack.h"int main(){ PLinkStack mystack; int num; mystack = createEmptyStack_link(); printf("请输入进栈的元素(0表示结束):\n"); scanf("%d", &num); while (num) { printf("当前的进栈元素是:%d\n", num); push_link(mystack, num); scanf("%d", &num); } print(mystack); while (!isEmptyStack_link(mystack)) { printf("当前的出栈元素是:%2d\n", top_link(mystack)); pop_link(mystack); } return 0;}
接下来是括号匹配的练习
调用上面的linkstack.h和linkstack.c的文件
然后再需要添加两个文件BracketMatch.c和main.c
两文件内容如下:
BracketMatch.c
#include <stdio.h>#include <stdlib.h>#include "linkstack.h"#define TRUE 1#define FALSE 0int BracketMatch(PLinkStack mystack){ int flag = 1; char ch, temp; push_link(mystack, '#'); // 栈底放# printf("请输入括号:(以'#'结束)"); scanf("%c", &ch); while (ch != '#') { if (ch == '(' || ch == '[') // 左括号。压栈 { push_link(mystack, ch); printf("压栈:"); print(mystack); printf("\n"); } else { if (ch == ')' || ch == ']') // 右括号,出栈 { temp = top_link(mystack); // 取栈顶元素 if ((temp == '(' && ch == ')') || (temp == '[' && ch == ']')) { pop_link(mystack); printf("出栈:"); print(mystack); printf("\n"); //如果匹配,出栈 } else { flag = 0; // 不匹配则设置标志位,跳出循环 break; } } } scanf("%c", &ch); } if (!flag || top_link(mystack) != '#') { printf("匹配失败\n"); return FALSE; } else { printf("匹配成功\n"); return TRUE; }}
main.c
#include <stdio.h>#include <stdlib.h>#include "linkstack.h"int main(){ PLinkStack mystack; mystack = createEmptyStack_link(); BracketMatch(mystack); return 0;}
0 0
- 数据结构——链栈(附基本的括号匹配)
- 数据结构实践——括号的匹配
- 数据结构——括号匹配
- 数据结构括号匹配(附源代码已测试)
- 第六周数据结构实践——括号的匹配(栈)【项目3-括号的匹配】
- [数据结构-栈]栈的基本操作&括号匹配
- 数据结构实践——括号的匹配(栈)
- C语言数据结构-桟——括号的匹配检验
- 【数据结构】栈的应用——检测括号是否匹配
- 数据结构——括号的匹配完整程序
- 数据结构(二)——栈及实现、括号匹配
- 洛谷 1739——表达式括号匹配(线性数据结构)
- 【数据结构——栈】括号匹配
- 数据结构练习2——括号匹配
- 数据结构——栈实现括号匹配
- 数据结构之单链表——括号匹配
- 数据结构题典021:栈的应用——括号匹配的检验(C++)
- 数据结构(1)——顺序栈的实现,以及括号匹配的应用
- oracle表空间使用率统计查询
- 字符串相关模板
- Android 技能树
- kmp字符串匹配C实现
- CC150 1.5 One Away
- 数据结构——链栈(附基本的括号匹配)
- 发布支持VR的Web3D内容
- LeetCode oj 136. Single Number (位运算)
- Ajax-基础学习
- 微信小程序 每日更新
- LeetCode oj 258. Add Digits(数字根)
- 在ubuntu上部署xampp
- java.sql.SQLException: Bigger type length than Maximum
- POJ 2836 Rectangular Covering -状压DP+枚举