话不多说,直接开讲
今天的例子围绕带头结点的单链表展开。
先来说说顺序表和单链表在内存中是怎么样存储数据的:
顺序表是一段物理地址连续的存储单元。而单链表是不连续的随机的存储单元,通过指针寻址的方式连接在一起的。
今天我们采用的线性表的结构体是这样的:
typedef enum {
false, true} bool;
typedef int datatype;
typedef struct ListNode{
datatype data; //链表里面的数据
struct ListNode *next; //链表里的指针,用来找下一个数据地址
}node; //声明node代表ListNode的一个实例,不要忘记;号
typedef node *List; //定义node类型的指针
如果对上述结构体看不懂的,不太理解指针的可以先来看我的另一篇文章
c语言线性表的结构体理解
先来看看今天的函数接口定义
List initList(); //初始化带头结点的单链表
void print(List head); //打印单链表
bool insert(List head,datatype x,node* p); //在指针p的位置,单链表的插入
node* find(List head,datatype x); //查找数据x的位置
bool delete(List head,node* p); //将位置p的数据删除
再来看看我们的主函数想要做的事情:
int main(){
List L; //定义头指针,用来找到我们编辑过得单链表
int N; //定义单链表的数据数目
datatype x; //定义数据
node* p ; //定义未知的数据位置
bool flag ; //验证是否删除或者插入成功,还是失败
//好了,准备工作做完了,看看我们想要做什么吧
//我想先要一个真的L头指针,那就初始化吧!
L=initList();
//有一个头了,那我想要往里头插数据了。插几个呢?
scanf("%d",