IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构我好爱:栈的应用--括号匹配 -> 正文阅读

[数据结构与算法]数据结构我好爱:栈的应用--括号匹配

我们可以通过栈来匹配括号是否齐全:把左括号压入栈,当遇见右括号且与栈顶括号匹配的时候,我们将栈顶的左括号弹出,继续检验。

简直就是用栈的完美特性“先进后出

常规操作:压栈与入栈就不说了!

主要函数:括号匹配函数:

????????1.开始逐个遍历字符串

????????2.将左括号读入

????????3.如果有拥有右括号且与栈顶括号匹配,弹出栈顶,否则return 0;

????????4.防止最后一个元素为左括号压入了栈,检查栈顶是否为提前设置的#,否则return 0

? ? ? ? 5.最终return 1,括号匹配成功

int baketJudge(char* str) {
	stackPtr head = InitStack();
	push(head, '#');
	char topc;
	for (int i = 0; i < strlen(str); i++) {
		char tempc = str[i];

		switch (tempc) {
		case '(':
		case '[':
		case '{':
			push(head, tempc);
			break;
		case ')':
			topc = pop(head);
			if (topc != '(') return 0;
			break;
		case ']':
			topc = pop(head);
			if (topc != '[') return 0;
			break;
		case '}':
			topc = pop(head);
			if (topc != '{') return 0;
			break;
		default:
			break;
		}
	}
	topc = pop(head);
	if (topc != '#') {
		return 0;
	}
	return 1;
}

?

完整代码:

#include<stdio.h>
#include<malloc.h>
#include<string.h>

typedef struct {
	char data[20];
	int top;
}*stackPtr,stack;

void Print(stackPtr head) {
	if (head->top == -1) return;
	for (int i = head->top; i >= 0; i--) {
		printf("%c ", head->data[i]);
	}
}


stackPtr InitStack() {
	stackPtr head = (stackPtr)malloc(sizeof(stack));
	head->top = -1;
	return head;
}

void push(stackPtr head, char c) {
	if (head->top >= 18) {
		printf("no space");
		return;
	}
	head->top++;
	head->data[head->top] = c;
}

char pop(stackPtr head) {
	char tempchar = head->data[head->top];
	head->top--;
	return tempchar;
}

int baketJudge(char* str) {
	stackPtr head = InitStack();
	push(head, '#');
	char topc;
	for (int i = 0; i < strlen(str); i++) {
		char tempc = str[i];

		switch (tempc) {
		case '(':
		case '[':
		case '{':
			push(head, tempc);
			break;
		case ')':
			topc = pop(head);
			if (topc != '(') return 0;
			break;
		case ']':
			topc = pop(head);
			if (topc != '[') return 0;
			break;
		case '}':
			topc = pop(head);
			if (topc != '{') return 0;
			break;
		default:
			break;
		}
	}
	topc = pop(head);
	if (topc != '#') {
		return 1;
	}
	return 1;
}

void Test() {
	char* tempExpression = "[2 + (1 - 3)] * 4";
	printf("%s \n", tempExpression);
	if (baketJudge(tempExpression)) printf("true\n");
	else printf("false\n");

	char* tempExpression1 = "[2 + (1 - 3)]) * 4";
	printf("%s \n", tempExpression1);
	if (baketJudge(tempExpression1)) printf("true\n");
	else printf("false\n");
}

int main() {
	Test();
	return 0;
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-12 16:37:25  更:2022-05-12 16:37:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:22:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码