整篇文章参考B站: https://www.bilibili.com/video/BV1Jt4y1S7nW
链表有俩部分:一部分是节点,另一个是不同节点之间的连接。
下面是部分具体的例子
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
//说明数据的类型
struct Node {
//里面放的内容
int data;
//连接
struct Node *pNext;
}
//给结构取别名
typedef struct Node node
//链表
struct Node* createNode (int xdata){
//准备内存
node *pNew =(node*)malloc( sizeof(node) * 1);//malloc的单位是字节
if (NULL == pNew)
return NULL
//把数据设置好
pNew ->data =xdata ;
pNew->pNext = NULL;
//返回
return pNew
}
//1 查
//1.1 从头到尾
void travel ( node* head){
node*p = head;
while(1){
if (NULL == p) break;
printf("%d" , p->data);
p = p-> pNext ;
}
}
//2增
//2.1 尾增法 这个地方只考虑在末尾处增加一个节点,所以找到null指针,在前面直接加上createNode就可以
bool append(node** list ,int pdata){
//防御性编程
if( NULL == list) return false;
if(NULL == *list){
*list = createNode(data);
return true;
}
//先找到尾巴
node* ptail = list ;
while(ptail->pNext) ptail = ptail ->pNext;
//添加到尾巴后面
ptail ->pNext = createNode (pdata);
//返回
return true;
}
//查找某个节点,返回它的地址
node* findNode( node* head ,int findData){
node* psrch = head ;
while ( psrch)
while ( psrch-> data != findData) psrch = psrch->pNext ;return psrch;
return NULL;
}
int main(){
//增
//给一个空指针,在这个空指针前面增加节点
node* list = NULL;
bool ret;
for ( int i = 0; i<6 ;i++){
ret = append( &list , i) //为什么这里传list的地址呢,如果这里不是传地址,如果给的链表第一个节点是null,那可
//就会报错,但是我依旧希望能在null前面增加节点,所以用其他的指针指向首个节点的位置,方便更改
if (ret)
printf("成功了!\n");
else
printf(“失败了\n”);
}
//查
//由于在对应的函数里面有printf,所以可以直观的看到节点有没有加入成功
travel( list );
//找节点
node* pfnd = findNode( list , 4);
if ( pfnd ) printf("找到了%d", pfnd->data);
else
printf("没有找到");
}