链表学习部分笔记

整篇文章参考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("没有找到");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值