IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> C语言——链表的使用 -> 正文阅读

[数据结构与算法]C语言——链表的使用

C语言——链表的使用

链表是一些包含数据的独立数据结构(通常称为节点)的集合。链表中的每个节点通过链或指针连接在一起。程序通过指针访问链表中的节点。通常节点是动态分配的。

创建链表

对于一个处理链表的程序而言,各节点在物理上是否相邻并没有什么区别,因为程序始终用链从一个节点移动到另一个节点。

#include <stdio.h>
#include <stdlib.h>  
#include <string.h>  
#define TSIZE 45   
struct film {
	char title[TSIZE];
	int rating;
	struct film * next;     
};
int main(void)
{
	struct film * head = NULL;  
	struct film * prev, *current;
	char input[TSIZE];

	puts("Enter first movet title : ");
	while (gets(input) != NULL && input[0] != '\0')
	{
		
		current = (struct film *) malloc(sizeof(struct film));
		if (head == NULL)  
			head = current; 
		else               
			prev->next = current; 
		current->next = NULL;  
		strcpy_s(current->title, TSIZE,input);  
		puts("Enter your rating <0-10> : ");
		scanf_s("%d", &current->rating);
		while (getchar() != '\n')        
			continue;
		puts("Enter next movie title (empty line to stop) :  ");
		prev = current; 
	}
	
	if (head == NULL)  
		printf("No data entered ");
	else
		printf("Here is the movie list : \n");
	current = head;   
	while (current != NULL) 
	{
		printf("movie: %s Rating: %d \n", current->title, current->rating);
		current = current->next;   
	}
	
	current = head;
	while (current != NULL)
	{
		free(current);
		current = current->next;
	}
	printf("Bye \n");
	return 0;
}

有序单向链表的插入操作

这段简化代码的关键之处在于,创建一个耳机指针,就拥有了一个指向该节点的指针(一级指针)和一个指向该节点link字段的指针(二级指针)。对于第一个节点,使用这个二级指针就是节点的根指针,初始化的时候引用二级指针current = *linkp,那么current->link就指向了下一节点。链表的使用不要求物理内存的连续,那么找到插入位置之后,只需要将插入的节点的link指向下一节点,将上一节点的指针 *linkp指向当前节点的地址即可。

#include <stdio.h>
#include <stdlib.h>

#define FALSE	0
#define TRUE	1
typedef struct NODE
{
	struct NODE* link;
	int value;
}ListNode;

int sll_insert(register ListNode **linkp, int new_value)
{
	register ListNode *current;
	register ListNode *new;
	//current = *linkp 指向第一个节点的地址
	//linkp二级指针,是一级指针(current->link)的地址
	while ((current = *linkp) != NULL 
			&& current->value < new_value)
	{
		linkp = &current->link;
	}

	new = (ListNode*)malloc(sizeof(ListNode));
	if (new == NULL)
	{
		return FALSE;
	}
	new->value = new_value;

	new->link = current;	//插入节点的指针指向下一节点
	*linkp = new;			//上一节点的指针指向插入的节点
	return TRUE;
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-28 12:36:28  更:2021-10-28 12:36:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:00:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码