线性表
- 线性表的定义:相同数据类型、有限、序列(有前驱与后继)。
- 线性表由相同数据类型的有限数据元素组成,数据元素由数据项组成。
顺序表
- 分为1-静态分配存储空间;2-动态分配存储空间。
- 优缺点
链表
- 结点类型描述
1 2 3 4
| typedef struct LNode{ ElementType data, struct LNode *next, }LNode,*LinkList
|
- LNode *L 等价于 LinkList L
- 头结点与头指针的关系
头指针始终指向链表中第一个节点,头节点时带头节点链表中第一个结点,通常不存储信息。
- 引入头结点所带来的好处
- 统一了空表与非空表操作
- 在链表第一个位置上的操作与其他位置一致
- 单链表的初始化
1 2 3 4 5 6 7 8 9 10 11
|
LinkList InitList() { LinkList L = (LNode*)malloc(sizeof(LNode)); if (L != NULL) { L->next = NULL; L->data = 0; } return L; }
|
注意
若p为指针,可用p->data或者(*p).data访问这个节点的数据域
- 求表长(有头结点)
1 2 3 4 5 6 7 8
| int length(LinkList L){ int length = 0 ; LinkList q = L; while(q->next != null){ length++; q = q->next; } }
|
- 按照值查找节点
1 2 3 4 5 6 7
| LinkList GetElem(LinkList L,int i){ LinkList q = L->next; while(q->data != i && q != null){ q = q->next; } return q; }
|
- 按照位序(序号)查找节点
1 2 3 4 5 6 7 8 9
| LinkList GetElem(LinkList L,int pos){ LinkList q = L; int j = 0 ; while(j < pos && q!=null){ q = q->next; j++; } return q; }
|
- 插入
1 2 3 4 5 6
|
s->data = e; s->next = p->next; p->next = s;
|