数据结构与算法(链表 栈 队列)

数据结构与算法

算法的5个基本特性:输入、输出、有穷性、确定性和可行性
算法的时间复杂度 T=O(f(n))
空间复杂度 S(n)=O(f(n)) 存储空间的实现

线性表:
(List)零个或多个数据元素的有限序列
顺序存储结构:连续的存储单元

#define MAXSIZE 20
typedef int ElemType;
typedef struct
{
	ElemType data[MAXSIZE];
	int length;
}SqList;

链式存储结构
单链表
静态链表

#define MAXSIZE 1000
typedef struct
{
	ElemType data;
	int cur;
}Component,StaticLinkList[MAXSIZE];

数组第一个元素的cur用来存放备用链表的第一个结点下标
最后一个元素的cur用来存放第一个插入元素的下标,相当于头结点
循环链表
有头指针的
p->next 不等于头结点,则循环未结束
不用头指针的,用终端结点的尾指针表示循环链表
rear->next->next即为开始结点
rear->next是保存头结点的结点
双向链表

typedef struct DulNode
{
	ElemType data;
	struct DulNode *prior;
	struct DulNode *next;
}DulNode, *DuLinkList;

栈与队列
栈是限定仅在表尾(栈顶top)进行查寻和删除操作的线性表。先进后出
队列是只允许在一端进行插入操作、而在另一端进行删除操作的线性表。先进先出
栈顶top
栈底bottom
Last in first out
简称LIFO
栈的顺序存储:
栈的结构定义

typedef int ElemType;
typedef struct
{
	ElemType data[MAXSIZE];
	int top;
}SqStack;

两栈共享空间结构(两个相同数据类型的栈)

typedef struct
{
	ElemType data[MAXSIZE];
	int top1;
	int top2;
}SqDoubleStack;

当top1+1==top;时为栈满
我们还需要一个判断是栈1还是栈2的栈号参数stackNumber。
栈的链式存储:(链栈)
链栈的结构

栈的应用–递归
斐波那契数列

int Fbi(int i)
{
	if(i<2)
		return i = = 0 ? 0 : 1;
	return Fbi(i-1)+Fbi(i-2);
}

四则运算表达式求值
中缀表达式转后缀表达式
规则:从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;
若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低于栈顶符号则栈顶元素依次出栈并输出,并将当前符号进栈
一直到输出后缀表达式为止。
队列 first in first out 简称FIFO
允许插入的一端为队尾,允许删除的一端为队头front
rear指针指向队尾元素的下一个位置)
front指针指向队头元素
当front= =rear时为空队列
循环队列
如何判断空、满
设置一个标志变量flag
当front= =rear&&flag= =0时队列为空
当front= =rear&&flag= =1时队列为满
方法二
保留最后一个空间
当front = =rear ,为空
当(rear+1)%QueueSize = = front ,为满
计算队列长队公式:
(rear - front +QueueSize)%QueueSize
循环队列的顺序存储结构

typedef struct
{
	ElemType data[MAXSIZE];
	int front;
	int rear;
}SqQueue;

初始化InitQueue
长度 QueueLength
入队

Status EnQueue (SqQueue *Q,ElemType e)
{
	if((Q->rear+1)%MAXSIZE == Q->front)
		return ERROR;
	Q->data[Q-rear]=e;
	Q->rear =(Q->rear +1)%MAXSIZE;
	
	return OK;
}

//出队

Status DeQueue (SqQueue *Q,ElemType *e)
{
	if(Q->front == Q->rear)
		return ERROR;
	*e=Q->data[Q->front];
	Q->front=(Q->front+1)%MAXSIZE;
	return OK;
}

以上为顺序存储

队列的链式存储结构

typedef int ElemType;

//结点结构
typedef struct QNode 
{
	ElemType data;
	struct QNode *next;
}QNode,*QueuePtr;

//队列链表结构
typedef struct
{
	QueuePtr front ,rear;
}LinkQueue;

串(P149)
KMP模式匹配算法(P159)

树(Tree)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值