数据结构——栈和队列

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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值