1.栈(stack)
栈是仅限定在栈顶进行插入或者删除的线性表
栈更重要的是一种思想
FILO first in last out 先进后出
LIFO last in first out 后进先出
栈顶(top) 进行插入和删除的那一端
栈底(bottom) 不能进行插入或者删除
栈的实现:顺序结构(数组) 链式结构(链表)
操作的实现
常用操作:
initStack : 初始化一个栈
clearStack : 清空一个栈
destroyStack : 销毁一个栈
push : 入栈(进栈,压栈) :往栈顶一端插入一个元素
pop : 出栈:把栈顶元素删除并获取他的值
isEmtpy :判断栈是否为空
不常用的操作:
getTop : 获取栈顶元素,但是不出栈
stackLength : 获取栈的长度(栈中元素的个数)
(1)顺序栈 用数组实现
typedef xxx sElemType;
#define MAX_ELEM_NUM 100
struct Sqstack
{
sElemType stack[MAX_ELEM_NUM];//顺序栈
int top;//栈顶元素在stack数组中的下标
};
typedef struct Sqstack Stack;//取别名
顺序栈虽然操作简单,但是元素最多个数是确定了的,不能扩展
(2)链式栈 类似链表
typedef int sElemType;
struct sNode
{
sElemType data;//保存数据
struct sNode * next ;//保存下一个元素的地址
};
struct stack
{
//选择线性表的哪一端作为栈顶 由你决定
//只要你操作(入栈和出栈)方便
struct sNode * first;//保存第一个元素的地址(栈顶 top)
struct sNode * last;//保存最后一个元素的地址(栈底)
int n;//元素个数
};//头结点 用来保存栈中有用的信息
typedef struct stack Stack;//取别名
2,队列 (queue)
队列是一种先进先出(FIFO: first in first out) 的线性表
队尾 (Rear) :允许进行插入的一端 叫做队尾
队头 (Front):允许删除的一端 叫做队头
和栈一样,是一个线性表,操作简单,更重要的是这种先进先出的思想
队列的实现 :顺序结构,链式结构
操作的实现:
initQueue :初始化队列
clearQueue :清空一个队列
destroyQueue :销毁一个队列
enQueue : 入队
deQueue : 出队
getHead :获取队头元素,不出队
queueEmpty :判断队列是否为空
queueLength :获取队列的长度
顺序结构的队列 ——“环形数组”
定义一个数组用来保存队列的元素
定义两个整数保存队头和队尾的下标
#define MAX_ELEM_NUM 100
typedef int qElemType;
struct sqQueue
{
qElemType queue[MAX_ELEM_NUM];//队列数组
int d;//保存队头元素的下标
int e;//保存队尾元素的下标
int n;//保存队列中元素的个数
};
typedef struct sqQueue Queue;
队列的链式实现
特殊的链表
typedef int qElemType;
struct qNode
{
qElemType data;
struct qNode * next;
};
typedef struct qNode QNode;
struct lkQueue
{
QNode * first;//指向队头
QNode * last;//指向队尾
int n;//元素的个数
};
typedef struct lkQueue LkQueue;