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数据结构-栈和队列,括号匹配举例---ShinePans的更多相关文章

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

    栈应用之 括号匹配问题(Python 版) 检查括号是否闭合 循序扫描被检查正文(一个字符)里的一个个字符 检查中跳过无关字符(所有非括号字符都与当前处理无关) 遇到开括号将其压入栈 遇到闭括号时弹出 ...

  2. 数据结构和算法(Golang实现)(14)常见数据结构-栈和队列

    栈和队列 一.栈 Stack 和队列 Queue 我们日常生活中,都需要将物品排列,或者安排事情的先后顺序.更通俗地讲,我们买东西时,人太多的情况下,我们要排队,排队也有先后顺序,有些人早了点来,排完 ...

  3. jzyzoj 栈——P1148:括号匹配加强版

    括号匹配加强版 描述 Description 对于一个由(,),[,]括号组成的字符串,求出其中最长的括号匹配字串. 具体来说,满足如下条件的字符串成为括号匹配的字符串: (1) (),[] 是括号匹 ...

  4. c数据结构 -- 栈与队列

    栈和队列 ·栈和队列是两种常用的.重要的数据结构 ·栈和队列是限定插入和删除只能在表的“端点”进行的线性表 栈 只能在队尾插入,只能在队尾删除 -- 后进后出 表尾称为栈顶:表头称为栈底 插入元素到栈 ...

  5. 第四章 栈与队列(c2)栈应用:括号匹配

  6. JavaScript数据结构——栈和队列

    栈:后进先出(LIFO)的有序集合 队列:先进先出(FIFO)的有序集合 --------------------------------------------------------------- ...

  7. 牛客国庆集训派对Day1:J:Princess Principal(栈模拟求括号匹配)

    题目描述 阿尔比恩王国(the Albion Kingdom)潜伏着一群代号“白鸽队(Team White Pigeon)”的间谍.在没有任务的时候,她们会进行各种各样的训练,比如快速判断一个文档有没 ...

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

    题目: Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the ...

  9. &10 基本数据结构——栈,队列和链表

    #1,栈(stack) 定义[来自百度]:栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素 ...

随机推荐

  1. jquery empty()方法

    empty() 方法从被选元素移除所有内容,包括所有文本和子节点. $(selector).empty() <html> <head> <script type=&quo ...

  2. 网页采集(通过HtmlAgilityPack+XPath)

    有HtmlAgilityPack这个类库可以更方便地对HTML内容进行分析和提取.因此今天特别学习和实践了一下HtmlAgilityPack和XPath,并作下笔记. 1.下载HtmlAgilityP ...

  3. C# 弹出USB外接硬盘(U盘)

    最近一个项目需要通过代码来弹出USB外接硬盘设备,经过google找到了下面这个类库: http://www.codeproject.com/Articles/13530/Eject-USB-disk ...

  4. iOS:二叉树多级表格的使用,使用三方库TreeTableView-master实现对json解析数据的递归遍历整理成树状结构

    在项目中,我们有时需要使用二叉树来实现多级表格的递归遍历查询,如果对二叉树比较懂,那么写起来其实也不费事,为了节省开发时间,下面介绍一下第三方库TreeTableView-master,这个三方库上给 ...

  5. C++实现委托机制(二)

    1.引言: 上一篇文章已经介绍了如何构建一个无参数无返回值的函数指针的委托,这篇文章将对上一文章所述委托进行扩展,使得可以注册任意函数指针,不过再讲篇内容之前先要介绍一下实现这个功能所需要了解的C++ ...

  6. Thinkphp学习笔记5-URL生成U方法

    为了配合所使用的URL模式,我们需要能够动态的根据当前的URL设置生成对应的URL地址,为此,ThinkPHP内置提供了U方法,用于URL的动态生成,可以确保项目在移植过程中不受环境的影响. 定义规则 ...

  7. 初始小R-安装启动与测试

    非常感谢<深入浅出数据分析>这本书让我有幸认识了R,多多少少的弥补了我心里对R语言.R分析.R工具的模糊认知,下面我们就来体验一下R语言的魅力吧!GO! 一:下载R R官方地址:http: ...

  8. Verilog 基础回顾 (一)

    Verilog 大小写敏感,且所有关键字都是小写 1  寄存器 register = storage,是数据存储单元的抽象,可视为能够存储数值的变量 (variable that can hold v ...

  9. android基础知识:SharedPreferences和PreferenceActivity

    1.android文件存储 对Android系统了解的都知道,Android系统有四种基本的数据保存方法,一是SharedPreference,二是文件,三是SQLite,四是ContentProvi ...

  10. 判断IE浏览器版本的精简脚本

    IE浏览器不管是什么版本,总是跟Web标准有些不太兼容.对于代码工作者来说,自然是苦不堪言,为了考虑IE的兼容问题,不管是写 CSS 还是 JS,往往都要对 IE 特别对待,这就少不了做些判断.本文不 ...