一.栈的(stack)定义:栈是一种仅允许在一段进行插入和删除运算的线性表。允许插入删除的叫栈顶,另一端叫栈底。
二.栈的基本操作:
(1)InitStack(S):构架一个空栈S。
(2)ClearStack(S):清楚栈所有的元素。
(3)StackEmpty(S):判断栈是否为空。为空返回true,否则false。
(4)GetTop(S):获取栈顶元素,不移动指针。
(5)Push(S,x):插入x作为栈S新的栈顶元素。(入栈)
(6)Pop(S):删除栈S的栈顶元素,并返回值(出栈)
三.顺序栈的存储结构定义: 利用一组地址连续的存储单元依次存放从栈底到栈顶的数据元素,存储结构举例。基本操作实现略。
# define Maxsize 100;
typedef int datatype;
typedef struct{
datatype stack[Maxsiz];
int top;
}SeqStack;
SeqStack *s;
四:链栈的存储结构:栈的链式存储结构与线性表的链式存储结构相同。一般实现是用my头结点的单链表实现(因为入栈,出栈操作限定在栈顶方向进行,时间复杂度O(1),没有必要附加头结点)。存储结构举例。基本操作实现略。
typedef char datatype;
typedef struct node{
datatype date;
struct node * next;
}LinkStack;
LinkStack *tope;
六.队列的定义:队列(queue)也是一种线性表的特例,它是一种限定在表的一端插入而另一端进行删除的线性表。
七.队列的基本操作:
(1)InitQueue(Q):构造一个空队列Q。
(2)QueueEmpty(Q):判断队列是否为空。
(3)QueueLength(Q):求队列的长度。
(4)GetHead(Q):返回队Q的头元素,不改变队列的状态。
(5)EnQueue(Q):插入元素x作为Q新的队尾元素。
(6)DeQueue(Q):删除Q的队头元素。
(7)ClearQueue(Q):清除队列Q中的所有元素。
八.链队列的定义:
链队列就是用链表表示的队列,他是限制仅在表头进行删除,仅在表尾进行插入的单链表。一个链队列需要指示队头和队尾的两个指针才能唯一确定。存储结构举例。基本操作实现略。
/*节点类型定义*/
typedef char datatype;
typedef struct Qnode{
datatype data;
struct Qnode *next;
}QNode;
/*链队列类型定义*/
typedef struct{
QNode * front;
QNode * rear'
}LinkQueue;
九.顺序队列的定义:对队列的顺序存储结构称为顺序队列。存储结构举例。基本操作实现略。
# define MAXSIZE 100
typedef struct{
datatype data[MAXSIZE];
int from;
int rear;
}SeqQueue;
避免队列假溢出有两个办法:(1)出队的时候队列向前移动一个位置。(2)将顺序队列data[0~maxsize-1]看做一个首尾相连的圆环。入队的时候要进行取模运算:rear=(rear+1)%maxsize。出队的时候要进行取模运算:front=(front+1)%maxsize,
判断是空还是满,有两种方法:另外设置一个标识位以区别队列的满或者空; 少用一个元素的空间,那么判断队满条件 (rear+1)%maxsize==front. 判断队空:rear==front。
十.递归定义:如果一个函数直接调用直接或间接调用直接,则称这一函数是递归定义的。