本文针对数据结构基础系列网络课程(3):栈和队列中第4课时栈的链式存储结构及其基本运算实现。按照“0207将算法变程序”[视频]部分建议的方法,建设自己的专业基础设施算法库。链栈算法库采用程序的多文件组织形式,包括两个文件:
1.头文件:listack.h,包含定义链栈数据结构的代码、宏定义、要实现算法的函数的声明;#ifndef LISTACK_H_INCLUDED
#defin...
分类:
编程语言 时间:
2015-09-15 11:11:01
阅读次数:
163
有关栈API详情请参看我的另一篇博文:栈的链式存储 - API实现
实例:
5 + 4=> 5 4 +
1 + 2 * 3 => 1 2 3 * +
8 + ( 3 – 1 ) * 5 => 8 3 1 – 5 * +
中缀表达式符合人类的阅读和思维习惯
后缀表达式符合计算机的“运算习惯”
中缀转后缀算法:
遍历中缀表达式中的数字和符号
对于数字:直接输出
对于符号:...
分类:
其他好文 时间:
2015-07-13 22:35:30
阅读次数:
167
基本概念
其他概念详情参看前一篇博文:栈的顺序存储 - 设计与实现 - API实现
这里也是运用了链表的链式存储API快速实现了栈的API。
代码:
// linkstack.h
// 链式存储栈的API声明
#ifndef _MY_LINKSTACK_H_
#define _MY_LINKSTACK_H_
typedef void LinkStack;
// 创建栈
L...
链式存储栈的API详情参看我的博文:栈的链式存储 - API实现
就近匹配
几乎所有的编译器都具有检测括号是否匹配的能力
如何实现编译器中的符号成对检测?
#include int main() { int a[4][4]; int (*p)[4]; p = a[0]; return 0;
算法思路
从第一个字符开始扫描
当遇见普通字符时忽略,
当遇见左符号时压入栈中
当遇...
分类:
其他好文 时间:
2015-07-13 18:40:26
阅读次数:
114
各位看官们,大家好,从今天开始,我们讲大型章回体科技小说 :C栗子,也就是C语言实例。闲话休提,
言归正转。让我们一起talk C栗子吧!
看官们,上一回中咱们说的是栈和特点和基本操作,最后通过顺序存储的方式实现了栈,这一回咱们继续
说栈,不过咱们这一回说的是栈的链式存储方式。
在代码中通过双向链表来实现栈的链式存储。入栈操作沿着表头到表尾的方向进行,出栈操作与其正好...
分类:
编程语言 时间:
2015-06-14 18:38:11
阅读次数:
186
今天总结链栈。
什么是链栈?
链栈就是栈的链式存储结构,就跟单链表差不多。只不过头指针变成了栈顶指针,这个指针总是指向栈顶元素。栈底结点的指针域指向NULL,当top==NULL时,则栈为空.具体实现时,对比着单链表,然后结合图示,很容易就写出来了。
图示:
实现:
#include
using namespace std;
template
struct Node {
...
分类:
编程语言 时间:
2015-05-13 10:38:33
阅读次数:
186
栈的链式存储1 栈的链式表示
栈的链式存储结构称为链栈,是运算受限的单链表。其插入和删除操作只能在表头位置上进行。因此,链栈没有必要像单链表那样附加头结点,栈顶指针top就是链表的头指针。图3-4是栈的链式存储表示形式。链栈的结点类型说明如下:
typedef struct Snode
{ ElemType data ;
struct Snode *next ;
} SNo...
分类:
其他好文 时间:
2015-04-29 09:56:46
阅读次数:
123
#include//#include//#include using namespace std;#define OK 1#define TRUE 1#define FALSE 0#define ERROR 0typedef int status;//返回的状态值typedef int elemty...
分类:
其他好文 时间:
2015-03-10 22:43:35
阅读次数:
138
一、基本概念1.栈是限定仅在表尾(栈顶)进行插入和删除操作的线性表;2.栈:后进先出(LIFO),适用于撤销操作二、存储结构1.栈的顺序存储结构:1)数组的首元素作栈底2)两栈共享空间2.栈的链式存储结构:链栈不需要头结点三、栈的应用:1.经典递归例子:斐波那契数列递归函数:直接调用自己或通过一系列...
分类:
其他好文 时间:
2015-03-05 16:13:13
阅读次数:
213
//1.初始化:(有头结点的情况下)
S=(LStack*)malloc(sizeof(LStack));//为栈开辟内存空间
S.next=NULL;//把栈置为空
//2.入栈
p=(LStack*)malloc(sizeof(Lstack));//给入栈的元素分配内存空间
p->data=e;//把元素e插入栈内
p->next=S->next;//使得e成为了栈顶元素
S->next=p;...
分类:
其他好文 时间:
2015-01-30 22:48:45
阅读次数:
213