线性表:具有相同特性数据元素的一个有限序列
存储结构:顺序存储(顺序表)和链式存储(链表)
顺序表可以随机访问,存储分配预先进行,一旦分配好在操作过程中始终不变
链表不支持随机访问,支持动态空间的存储分配
顺序表做插入的时候要移动多个元素,链表中插入元素无需移动元素
下面时他们的初始化操作
#define maxsize 100 typedef struct { int data[maxsize]; int length; }sqlist; //单链表的定义 typedef struct node { int data;//数据域 struct node *next;//存放后继结点的指针 }node; //双链表的定义 typedef struct dnode { int data; struct dnode *next;//后继结点指针 struct dnode *prior;//前驱结点指针 }dnode;
带头结点的循环单链表head->next=null为空
不带头结点的循环单链表head=null为空
循环双链表为空时head->next=head->prior=head
栈:一种只能在一端进行插入和删除操作的线性表
栈顶:允许插入(入栈)和删除(出栈)的一端
先进后出的特点
栈的初始化
//顺序栈的定义 typedef struct { int data[maxsize]; int top;//栈顶指针 }sqstack; //链式栈的定义 typedef struct LNode { int data;数据域 struct LNode *next;指针域 }LNode;
有些书规定栈空时st.top==-1,栈满时st.top=maxsize-1;
top==0为空的话会大大浪费一个元素的空间大小
顺序栈的非法状态(上溢和下溢)
上溢:栈满还继续入栈
下溢:栈空还继续出栈
队列:仅在表的一端进行插入(队尾),在另一端进行删除(队头)的线性表
进队就是插入元素,出队删除元素
先进先出
下面时队列的初始化
//顺序队列的定义 typedef struct { int data[maxsize]; int front;//队首指针 int rear;//队尾指针 }sqQueue; //链队的定义 typedef struct Qnode { int data;数据域 struct Qnode *next;指针域 }Qnode;
本人的复习笔记,喜欢就点个赞吧!