1.线性表
顺序存储的结构类型:
typedef struct {
ElemType data[MaxSize];
int length;
}
链式存储的结构类型:
单链表:
typedef struct Node {
ElemType data;
struct Node * next;
}LinkList;//头结点类型也是一样
双链表:
typedef struct Node {
ElemType data;
struct Node * prior;
struct Node * next;
}DLinkList;//头结点类型也是一样
循环单链表和循环双链表:基本与单链表和双链表相同,循环单链表中
表尾的next指针指向了头结点,循环双链表中表尾的指针指向了头结点,
头结点的prior指针指向了尾结点
2.栈:先进后出
顺序存储的结构类型:
typedef struct {
ElemType data[MaxSize];
int top;//栈顶指针,初始为-1,为-1表示栈空,为MaxSize - 1表示栈满
}SqStack;
链式存储的结构类型:
typedef struct Node {
ElemType data;
struct Node * next;
}LinkStack;//创建头结点,头结点的next指向栈顶元素,也就是进栈的时候使用头插法进栈
3.队列:先进先出,一端插入,一端删除
顺序结构类型的定义:rear ....front//环形队列
typedef struct {
ElemType data[MaxSize];
int front,rear;//front队首,rear队尾,初始时都为0,后面需要循环进1, front=(front + 1) % MaxSize
//rear负责入队,并指向刚入队的元素,front负责出队,并指向队首元素的前一个单元,空单元
}SqQueue;//判断队空的条件,front == rear
//判断队满的条件,(rear + 1) % MaxSize == front;
//入队:rear = (rear + 1) % MaxSize;data[rear] = e;
//出队:front = (front + 1) % MaxSize;e = data[front];
链式存储的结构类型:
数据结点类型:
typedef struct Node {
ElemType data;
struct Node * next;
}QNode;
链队结点类型:
typedef struct {
QNode * front;//队首指针,假如队列不空,则指向队首元素
QNode * rear;//队尾指针,假如队列不空,则指向队尾元素
}LinkQueue;
入队:(无需判断队满)rear->next = (QNode *) malloc(sizeof(QNode));
出队:(判断空)front = front -> next ->next;
4.串:
顺序存储结构:
typedef struct {
char data[MaxSize];
int length;
}
链式存储结构:
typedef struct Node{
char data;
struct Node * next;
}LingString;//单链表
5.数组:
稀疏矩阵的三元组定义:
元素类型:
typedef struct {
int r;
int c;
ElemType d;
}TupNode;
顺序表定义:
typedef struct {
int rows;//稀疏矩阵的行
int cols;//稀疏矩阵的列
TupNode dat[MaxSize];//稀疏矩阵的非零元个数
}TSMAtrix;
稀疏矩阵的十字链表定义:
typedef struct mtxn {
int row;//链表头结点存储的是稀疏矩阵的行数
int col;//链表头结点存储的是稀疏矩阵的列数
struct mtxn * right,* down;
union {
ElemType value;//元素结点
struct mtxn * link;//链表头结点,行头结点,列头结点
}tag;
}MatNode;
广义表:
typedef struct lnode {
int tag;
union {
ElemType data;
struct lnode *sublist;//子表
}
struct * lnode;//指向下一个元素,可以是单个的原子也可能是子表
}GLNode;
6.树:逻辑结构属于非线性结构
双亲存储结构:
typedef struct {
ElemType data;
int parent;
}PTree[MaxSize];
孩子链存储结构:
typedef struct node {
ElemType data;
struct node *sons[MaxSons];//一维指针数组,存储每个孩子结点的指针
}TSonNode;
孩子兄弟链存储结构:
typdedef struct tnode {
ElemType data;
struct tnode *hp;//指向兄弟
struct tnode *vp;//指向孩子
}TSBNode;
7.二叉树:与度为2的数区分。
链式存储结构:
typdedef struct tnode {
ElemType data;
struct tnode *hp;//指向兄弟
struct tnode *vp;//指向孩子
}TSBNode;