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");
}

{}[] 的原理也一样

最新文章

  1. Android UI 之实现多级列表TreeView
  2. 嵌入式系统上实现GPS全球定位功能
  3. 关于representation的理解
  4. VS无法启动 IISExpress web 服务器
  5. [原创] 关于quartz (spring 中的任务调度器)时间配置
  6. 共享内存 最快IPC 的原因
  7. 分布式存储系统sheepdog
  8. PCL—低层次视觉—点云滤波(基于点云频率)
  9. homework07
  10. winform Label与DataGridView右对齐 分类: WinForm 2014-05-19 20:51 446人阅读 评论(0) 收藏
  11. 设置Tomcat默认界面
  12. UML 之 序列图和协作图
  13. Alamofire网络库进阶教程
  14. 用Bash脚本将Linux普通用户添加为系统管理员
  15. Java五道输出易错题解析(进来挑战下)
  16. D - Counting Test Gym - 101532D 字符串
  17. Confluence 6 Windows 中以服务方式自动重启为服务手动安装 Confluence 分发包
  18. 使用Log4j日志处理
  19. centos6.5上安装配置telnet服务
  20. dos 下如何查看环境变量

热门文章

  1. [Android 源码] Android源码下载
  2. 数学图形(2.20)3D曲线
  3. Dede(织梦) CMS SQL Injection Vulnerability
  4. JS性能优化之创建文档碎片(document.createDocumentFragment)
  5. 【笔记】css 1像素边框
  6. STL - 判断式(Predicate) - 单参判断式(Unary Predicate)
  7. STL - 常用顺序容器代码
  8. python的加密模块(md5,sha,crypt)学习
  9. TP框架模板中IF Else 如何使用?
  10. SQL Server 性能调优(方法论)【转】