C数据结构-栈和队列,括号匹配举例

1.栈和队列是两种特殊的线性表

运算操作被限定只能在表的一端或两端插入,删除元素,故也称它们为限定的线性表结构

2.栈的基本运算

1).Stackinit(&s) 构造一个空栈

2).Stackempty(s) 判断s是否为空栈,当s为空栈时,函数返回值1 否则 0

3).Push(&s,x)  在栈s 的顶部插入元素x,简称将x入 栈

4).Pop(&s,&x) 在栈s

中删除顶元并将其值保存在x单元中返回,简称将x出栈

5)Gettop(s,&x)  读s栈中的顶元素,将其值保存在x 单元中并返回

6)Stacklength(s)  返回栈s中元素的个数,即s的长度

7)Stackfull(s)  判定栈s 是否已满,当s已满时,返回值为1 否则为 0

应用, (){}[] 括号的匹配 举例:(待完善)

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>  //system(); 这个指令需要用到此头文件
#include <ctype.h> //toupper要用到
#include <malloc.h> //在内存管理时用到的头文件
#include <string.h>  //字符串的头文件

#define MAX_SIZE 100  //定义栈初始空间的容量

typedef struct      //建立结构体
{
	int top;
	int size;
	char *base;
}STACK;

void push(STACK *s, char e);   //压入元素
void pop(STACK *s, char *e);   //删除元素

void push(STACK *s, char e)
{
	if (s->top + 1 > MAX_SIZE) //如果 此时top之前指向 100的位置,那么就要溢出了,则例通过判断排除溢出的情况,直接退出当前函数
		return;
	*(s->base + s->top) = e; //base指向栈底,top指向栈顶元素的上一层空白处,将空白处填入e
	s->top++;   //空白处填入1后,top指向下一个空白
}

void pop(STACK *s, char *e)
{
	if (s->top <= 1)
		return;
	*e = *(s->base + s->top);
	s->top--;  //将栈顶指针 回移
}

STACK stack;
int result = 0;

void main(int argc, char **argv)
{
	char buf[100];
	int i = 0;
	char temp;
	stack.top = 1;  //数据从stack->base+stack+top 开始存
	stack.size = MAX_SIZE;  //为100
	stack.base = (char *)malloc(sizeof(char)*stack.size);//申请内存空间
	if (stack.base = NULL)
	{
		printf("stack = NULL RETURN");
		return;
	}
	memset(stack.base, '0', sizeof(STACK));

	memcpy(buf, argv[1], strlen(argv[1]));//将需要解析的字符串存在buf中
	buf[strlen(argv[1])] = '\0'; //'\0'来表示结束

	while (buf[i] != '\0')
	if (buf[i] == '(')  //碰到左括号
	{
		push(&stack, buf[i]); //出现左括号,入栈
	}
	else if (buf[i] == ')')  //碰到右括号
	{
		if (stack.top == 1) //如果栈中没有左括号,则错误,result=1
		{
			result = 1;
		}
		else if (*(stack.base + stack.top - 1) == '(');//如果栈里有左括号
		{
			pop(&stack, &temp); //出栈
		}
		i++;
	}
	if (stack.top > 1) //如果括号中还有左括号,缺少右括号
		result = 1;
	if (result == 1)
		printf("Wrong!");
	if (result == 0)
		printf("Right");
}

{}[] 的原理也一样

C数据结构-栈和队列,括号匹配举例,布布扣,bubuko.com

时间: 2024-10-24 19:47:50

C数据结构-栈和队列,括号匹配举例的相关文章

[栈和队列]括号匹配

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #define INIT_STACK_SIZE 100 5 typedef struct 6 { 7 char * chOperator; 8 int dwtop; 9 }OPND; 10 11 void InitStack(OPND *); 12 char Pop(OPND *); 13 void Push(OPND *,char );

数据结构 栈的应用——括号匹配的检验

1 #include <stdio.h> 2 #include <malloc.h> 3 #include <stdlib.h> 4 #include <math.h> 5 6 #define STACK_INIT_SIZE 100 //存储空间初始分配量 7 #define STACKINCREMENT 10 //存储空间分配增量 8 #define SElemType char //当前数据类型 9 10 typedef struct 11 { 12 S

数据结构实验之栈四:括号匹配(栈)

数据结构实验之栈四:括号匹配 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 给你一串字符,不超过50个字符,可能包括括号.数字.字母.标点符号.空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配. 输入 输入数据有多组,处理到文件结束. 输出 如果匹配就输出"yes",不匹配输出"no" 示例输入 sin(20+10) {[}] 示例输出 yes no 提示 来源 ma6174

leetcode题解:Valid Parentheses(栈的应用-括号匹配)

题目: Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid. The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]&

栈应用之括号匹配

栈的使用之括号匹配 Char s[n]是一个字符串数组.Stack是一栈,i是元素对应的下表.设一个char flag[n]数组,用来标记是否匹配,数组中数值是‘l’(左不匹配,即没有找到右括号),‘r’(右不匹配),‘o’匹配成功. 算法描述: (1)遍历该字符串数组. While(遍历){ if遇到‘(’,do stack.push(i)(i 是‘(’对应的数组下表),flag[i]=’o’(不一定就是匹配成功,以后遍历完如果stack还有元素,说明没有左匹配,要改成‘l’:如果没有,则就是

数据结构——栈和队列相关算法实现

数据结构栈和队列的基本算法实现 限定性线性表--栈 栈的定义 栈作为一种限定性的线性表,是将线性表的插入和删除操作限制为仅在表的一端进行. 基本算法演示 /* 栈的常见操作: 1.初始化栈 2.元素进栈 3.元素出栈 4.栈的遍历 5.判断栈是否为空栈 6.清空整个栈 */ # include <stdio.h> # include <stdlib.h> typedef struct Node { int date; struct Node * pNext; }NODE,* PNO

栈应用之 括号匹配问题(Python 版)

栈应用之 括号匹配问题(Python 版) 检查括号是否闭合 循序扫描被检查正文(一个字符)里的一个个字符 检查中跳过无关字符(所有非括号字符都与当前处理无关) 遇到开括号将其压入栈 遇到闭括号时弹出当时的栈顶元素与之匹配 如果匹配成功则继续,发现匹配失败时则以检查失败结束 1 def check_parens(text) : 2 # 括号匹配检查函数,text 是被检查的正文串 3 parens = "(){}[]" 4 open_parens = "({[" 5

【数据结构】栈的应用 括号匹配

括号配对问题: 假设一个表达式中包含三种类型的括号:(),{ },[],嵌套顺序任意 { [()()] } 1  2 3 4  5  6 7  8 引入"期待的急迫程度"概念,例如当接受第一个括号 { ,则它期待与第8个 } 匹配,然而当接受到第二个 [ 时,此时[最期待和第七个 ] 匹配. #ifndef _MATCH_H_ #define _MATCH_H_ #include<iostream> #include <malloc.h> #include &l

【数据结构】栈的应用——括号匹配问题

括号匹配问题: 给一个字符串,其中包含小括号.中括号.大括号,求该字符串中的括号是否匹配. 例如:()()[]{} 匹配([{()}]) 匹配[](               不匹配[(])              不匹配 利用堆栈的思路:建立一个堆栈,然后遍历字符串,如果是'(','{'.'[',则入栈,否则判断当前字符串和栈顶元素是否是一对括号:要注意的是,需要提前判断栈是否为空,为空的时候取top是违法的的,所以只要为空就入栈,然后执行下一次循环,而且,只要循环过程中出现一次栈顶元素和