线性结构的逻辑结构就是一对一的关系,除了首尾节点外每个节点都有唯一的前驱和唯一的后继,
线性结构中最常见的就是线性表,而研究某一个结构上面的操作,就先要让他可以在计算机中表示,即怎么存储他,线性表有顺序存储,也有链式存储,
上次说了顺序存储,有的小伙伴会发现,这个顺序存储插入,删除操作也太麻烦了吧,这些操作需要移动很多元素啊,那么有没有使插入,删除操作简单点的存储结构呢,
下面来说说线性表的链式存储和用链式储存后对线性表的相关操作,链式存储一般有两个域,一个数据域,一个指针域,他们仅仅是逻辑地址相邻,物理地址不一定相邻,链式存储的好处就是可以扩容,插入,删除操作也比顺序存储简单,当然他也有不足的地方,他不能随机访问,必须顺序访问,
1.定义线性表的节点
//定义链表的节点 typedef struct LNode { int num; //节点数据域 struct LNode* next; //节点指针域 }LNode,*LinkList;
2.初始化操作
//初始化 int InitList(LinkList *L) { *L= (LNode *)malloc(sizeof(LNode)); *L->next = NULL; return 0; }
3.取第i个元素操作
//取值 int GetElem(LinkList L, int i) { L = L->next; int j = 1; while (L&&j<i) { L = L->next; j++; } if (!L||i<j) { return -1; } else { return L->num; } }
4.查找操作
//查找 LinkList LocateElem(LinkList L,int e) { L = L->next; while (L&&L->num!=e) { L = L->next; } return p; }
5.插入操作
//插入 int ListInsert(LinkList *L, int i, int e) { int j = 0; while (*L&&(j<i-1)) { (*L) = (*L)->next; j++; } if (!(*L)||j>i-1) { return -1; } LNode* p = (LNode*)malloc(sizeof(LNode)); p->num = e; p->next = (*L)->next; (*L)->next = p; return 0; }
6.删除操作
//删除 int ListDelete(LinkList *L, int i) { int j = 0; while (*L&&j<i-1) { (*L) = (*L)->next; j++; } if (*L||(j<i-1)) { return -1; } (*L)->next = (*L)->next->next; free((*L)->next); return 0; }
好了,我们下回见,peace
原文:https://www.cnblogs.com/gitpy123/p/13248006.html