一.链表的定义
概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链
接次序实现的,相当于一个一个的结点链接在一起就构成了链表.如下图所示.

无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结
构,如哈希桶、图的邻接表等等。另外这种结构在笔试面试中出现很多。
二.链表的实现
1,无头+单向+非循环链表增删查改实现
其具体思路如下图所示

这样具体的思路就有了,然后是具体的程序代码
先是头文件
- 1 #include<stdio.h>
- 2 #include <stdlib.h>
- 3 #include<malloc.h>
- 4 #include<assert.h>
- 5
- 6 typedef int SLTDataType;
- 7
- 8 typedef struct SListNode
- 9 {
- 10 SLTDataType data;
- 11 struct SListNode* next;
- 12 }SLTNode;
- 13
- 14 // 单向+不带头+不循环
- 15 void SListPrint(SLTNode* plist); //打印链表
- 16 SLTNode* BuySLTNode(SLTDataType x);//创建节点
- 17 void SListPushBack(SLTNode** pplist, SLTDataType x); //尾插
- 18 void SListPushFront(SLTNode** pplist, SLTDataType x);// 头插
- 19
- 20 void SListPopBack(SLTNode** pplist); //尾删
- 21 void SListPopFront(SLTNode** pplist);//头删
- 22
- 23 SLTNode* SListFind(SLTNode* plist, SLTDataType x);//查找
- 24 void SListInsertAfter(SLTNode* pos,SLTDataType x);//pos后插入
- 25 void SListInsertBefore(SLTNode**pplist,SLTNode* pos,SLTDataType x);//pos前插入
- 26 void SListEraseAfter(SLTNode* pos);//删除指定数据
函数的具体实现
主函数调用
- #include"SList.h"
- void Test()
- {
- SLTNode* plist=NULL;
- SListPushBack(&plist,2);
- SListPushBack(&plist,3);
- SListPushBack(&plist,4);
- SListPushBack(&plist,5);
- SListPushFront(&plist,6);
- SListPrint(plist);
- SListPopBack(&plist);
- SListPrint(plist);
- SListPopFront(&plist);
- SLTNode* pos = SListFind(plist, 3);
- SListInsertAfter(pos,40);
- SListPrint(plist);
- SListInsertBefore(&plist,pos,300);
- SListPrint(plist);
- SListEraseAfter(pos);
- SListPrint(plist);
- }
- int main()
- {
- Test();
- return 0;
- }