欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

链表学习部分笔记

程序员文章站 2022-05-10 11:04:01
...

整篇文章参考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("没有找到");
}
相关标签: C 链表