数据结构复习笔记(表结构)
线性结构:一对一
顺序存储 如:数组
链式存储 如:链表
顺序表
一般以数组的形式实现
存取方式:随机存取
查找方便,插入删除元素麻烦
链表
链表,线性链表,循环链表,双向链表
存取方式:顺序存储
链表的实现:
typedef struct Node
{
Type data; //数据域
struct Node *next; //指针域
} Node, *LinkList;
//p为指针
LinkList p =new(Node);
画图理解前插法,尾插法。
以及链表的插入,删除的操作
题:两个链表的合并
链表的查找比顺序表慢,插入删除较为简单。
循环链表
最后一个指针的next指向头
双向链表
每个节点有两个指针,指向前驱与后继,相对而言操作会多一点所以编程前最好画一个示意图
栈
想象一下一个弹夹,先压入的子弹后射出。
栈就是这样,FILO
数组与链表都可以用来实现栈
栈的实现
//顺序存储
typedef struct
{
Type *base; //栈底指针
Type *top; //栈顶指针
int stacksize; //当前分配的存储容量
} SStack; //顺序栈结构类型
//链式存储
typedef struct SNode
{
Type data; //数据域
struct SNode *next; //指针域
} SNode, *LinkStack;
队列
参考排队的情况
FIFO
队列实现
//顺序队列
typedef struct
{
Type *front; //队首指针
Type *rear; //队尾指针
int queuesize; //当前分配的存储容量
} SQueue; //顺序队列结构类型
//链队列
typedef struct QNode
{
Type data; //数据域
struct QNode *next; //指针域
} QNode, *LinkQueue; //链队列结构类型
循环队列
主要针对顺序队列浪费问题,参考衔尾蛇。
对链式队列,直接构造环即可。
对于顺序队列,在队列不满时,使用% 找寻空位。
栈与队列应用
括号匹配检验
算术表达式求值
递归算法
串
串(字符串):是零个或多个字符组成的有限序列。记作: S=“a1a2a3…”,其中S是串名,ai(1≦i≦n) 可以是字母、数字或其它字符
//顺序存储结构
#define MAX_STRLEN 256
typedef struct
{ char str[MAX_STRLEN] ;
int length;
} StringType ;
//链式存储
#define BLOCK_SIZE 3
typedef struct Blstrtype
{ char data[BLOCK_SIZE] ;
struct Blstrtype *next;
}BNODE ;
广义表
主要考gettail,gethead、
理解head与tail即可