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. Flink 靠什么征服饿了么工程师?

    Flink 靠什么征服饿了么工程师? 2018-08-13    易伟平 阿里妹导读:本文将为大家展示饿了么大数据平台在实时计算方面所做的工作,以及计算引擎的演变之路,你可以借此了解Storm.Spa ...

  2. django的动态url,url里含有参数,含有参数的url

    #!/usr/bin/env python # coding:utf- from django.conf.urls import url,include from django.contrib imp ...

  3. Python开发之AJAX全套

    概述 对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上. 1.传统的Web应用 一个简单操作需要 ...

  4. C#连接SQL Server数据库进行简单操作[转]

    环境:VS2010 + SqlServer 2008 首先,按照面向对象的程序设计思想,设计一个数据库操作工具类MyTool.cs,该类中封装了关于数据库连接和操作的方法,各个功能模块在需进行数据库操 ...

  5. Cognos备份与恢复方案

    场景:早上来上班,突然发现COGNOS服务器挂掉了,比如硬盘彻底坏掉了,不能恢复了,那该怎么办?前提是肯定要有备份啊. 备份内容: A:FM模型备份OKB:Cognos内容库备份OK 恢复过程: 1: ...

  6. Report Studio中树提示如何使用

    环境:比如在一个销售数据里面,用户既要选择年,又要选择月,还要选择日,或者是随意选择其中的一个作为筛选条件,如果是Cube的话是可以通过拖拉不同的维度层级来实现该功能的,但是如果是FM开发的DMR模型 ...

  7. [Grunt] Watch && grunt-contrib-watch

    Watch is an essential component of any Grunt build, and you will find yourself using it in almost ev ...

  8. 【转】使用python进行多线程编程

    1. python对多线程的支持 1)虚拟机层面 Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,暂时无法利用多处理器的优势.使 ...

  9. localhost连接慢如何解决?

    localhost连接慢如何解决 php 环境本地用ip连接mysql响应快, 今天碰到一个连接mysql的怪问题,我在php 环境本地用ip连接mysql响应快,用localhost连接慢,后来百度 ...

  10. Python List+Tuple+Dict+Set小结

    创建List:L = ['Adam', 'Lisa', 'Bart', 'Gechong', 'Kongming'] 显示List:L[0] 遍历List:print (L)和for循环 更新List ...