数据结构 栈与队列

栈与队列都是操作受限的线性表

1.栈stack(后进先出 LIFO结构)

包括顺序栈(特殊的有两栈共享空间),链栈

1.1顺序栈

typedef	struct
{
	//顺序栈结构
	SElemType	data[MAXSIZE];
	int	top;//栈顶元素指针	空栈设为-1
}SqStack;	

typedef	struct
{
	//两栈共享空间
	SElemType	data[MAXSIZE];
	int	top1,top2;//栈顶元素指针	空栈设为-1和MAXSIZE
}SqDoubleStack;

1.2链栈

//不需要头节点,头指针和栈顶指针合二为一
//链栈的节点
typedef	struct StackNode {//结构标记    C语言程序设计现代方法第二版17.5.1
	SElemType	data;
	struct StackNode* next;//next是LinkStackPtr数据类型
}StackNode,*LinkStackPtr;

//头指针结构(相当于把栈元素个数和栈顶指针放一起了)
typedef	struct
{
	LinkStackPtr	top;//top指向栈顶StackNode
	int	count;
}LinkStack;

1.3栈的应用

1)递归,斐波那契数列的实现

2)四则运算表达式求值,中缀表达式转化为后缀表达式

3)括号匹配

4)进制转换

5)迷宫求解

1.4课后错题

1)c语言标识符以英文or下划线_开头

2)栈只可能发生上溢,指栈顶指针超出了最大范围

3)采用非递归方式重写递归程序(包括边界表达式和边界条件)时,单向递归和尾递归可以不需要借助栈来实现。

2.队列queue(先进先出FIFO结构)

2.1循环队列(顺序存储

typedef	struct
{
	QElemType	data[MAXSIZE];
	int	front;//头指针
	int	rear;//尾指针
}SqQueue;

//头指针指向队头元素,尾指针指向队尾元素后一个位置
//在牺牲一个单元来区分队空或队满时
//队满
(Q->rear+1)%MAXSIZE==Q->front
//队列长度
(Q.rear + MAXSIZE - Q.front) % MAXSIZE

也可以通过设置变量count        or        tag来表示队空或队满。

2.2链队列

typedef	struct QNode//链队列的节点结构
{
	QElemType	data;
	struct QNode*	next;

}QNode,*QNodePtr;

typedef	struct//链队列的头尾指针
{
	QNodePtr	front, rear;
}LinkQueue;

//为了操作方便,通常会设置头节点
Status	InitQueue(LinkQueue* Q) {
	//初始化队列(构造空队列
	QNodePtr	s = (QNodePtr)malloc(sizeof(QNode));//头节点
	if (!s)
		exit(OVERFLOW);
	s->next = NULL;
	Q->front = s;
	Q->rear = s;
	return	OK;
}

双端队列通常考察入队序列和出队序列是否对应的问题。输入输出可能部分受限。

2.3队列应用

1)层次遍历(二叉树的层次遍历)

2)打印数据缓冲区

3)多用户引起的资源竞争问题

4)页面替换算法

5)广度优先搜索图

2.4错题

1)单链表实现队列,队头设置在链头。

3.数组和特殊矩阵

考虑如何用最小的空间来存储同样的一组数据

3.1数组的存储结构

3.2特殊矩阵的压缩存储

包括对称、三角、三对角、稀疏矩阵(三元组表、十字链表)

主体的思想就是计算前面的存储元素的个数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值