线性表
线性表的定义
线性表是具有相同数据类型的n个数据元素的有限序列。其中n为表长,当n=0时线性表是一个空表。若用L命名线性表,则其一般表示为L = ( a 1 , a 2 , . . . , a i , a i + 1 , . . . , a n )
PS:整数递增不能算是线性表(不满足有限);
特点:除第一个元素外,每个元素有且仅有一个直接前驱。除最后一个元素外,每个元素有且仅有一个直接后继;
基本操作
1 2 3 4 5 6 7 8 9
| InitList(&L):初始化表。构造一个空的线性表 DestoryList(&L):销毁操作 ListInsert(&L,i,e):插入操作 ListDelete(&L,i,&e):删除操作,并用e返回删除元素的值 LocateElem(L,e):按值查找操作,L表中给定关键字值的元素 GetElem(L,i):按位查找操作。L表中的第i个位置的元素值 Length(L):求表长 PrintList(L):输出操作 Empty(L):判断操作
|
Tips:对参数修改需要“带回来”时需要引用“&”
顺序表(顺序存储)重点
静态分配
1 2 3 4 5
| #define MaxSize 10 typedef struct{ ElemType data[MaxSize]; int length; }SqList;
|
动态分配
1 2 3 4 5 6 7 8 9 10 11
| #define InitSize 10 typedef struct{ ElemType *data; int MaxSize,length; }SqList;
L.data = (ElemType*)malloc(sizeof(ElemType)*InitSize); free(L);
L.data = new ElemType[InitSize]; delete L;
|
顺序表特点:
1.随机访问2.存储密度高3.拓展容量不方便4.插删数据元素不方便;
单链表(带头节点和不带头节点)
1 2 3 4
| typedef struct LNode{ ElemType data; struct LNode *next; }LNode, *LinkList;
|
Tips: 1、LinkList等价于LNode *;2、带头结点的空表定义 L->next==NULL写代码更方便;3注意考试时判断是否是有头节点;
创建单链表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| LinkList List_HeadInsert(LinkList &L){ LNode *s; int x; L=(LinkList)malloc(sizeof(LNode)); L->next = NULL; scanf("%d",&x); while(x!=9999){ s = (LNode*)malloc(sizeof(LNode)); s->data = x; s->next = L->next; L->next = s; scanf("%d",&x); } return L; }
|
头插法逆置(重点考点)
1 2 3 4 5 6 7 8 9
| LNode *p,*q; p=L->next; L->next=NULL; while(p){ q=p->next; p->next=L->next; L->next=p; p=q;} return L
|
双链表(带头结点)
插入
1 2 3 4 5
| s->next=p->next; if(p->next) p->next->prior=s; s->prior=p; p->next=s;
|
循环链表
头结点的next指向头结点L->next=L
静态链表
分配一整片连续的存储空间,各个结点集中安置(其中0号结点为头结点不放数据),游标充当指针(当游标为-1表示已经达到表尾)
1 2 3 4 5 6 7 8 9
| #define MaxSize 10 typedef struct{ ElemType data; int next; }SLinkList[MaxSize]; void testSLinkList(){ SLinkList a; }
|
或者还可以
1 2 3 4 5 6 7 8 9 10
| #define MaxSize 10 struct Node{ ElemType data; int next; };
vode testSLinkList(){ struct Node a[MaxSize]; }
|
静态链表优缺点
优点:增删改查不需要大量移动元素;
缺点:不能随机存储,只能从头结点开始依次往后查,容量固定不可变;
顺序表和链表总结
逻辑结构:都属于线性表,都是线性结构;
存储结构:顺序存储VS链式存储;
基本操作:创销、增删改查