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语言单链表的创建反转与合并

//不采用封装的单链表
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<time.h>
typedef int DATA;

typedef struct Node                              //创建节点的结构
{
	DATA data;
	struct Node *next;
}NODE ,*LPNODE;

LPNODE createList()                               //创建初始化链表的模板
{
	LPNODE HeadNode = (LPNODE)malloc(sizeof(NODE));//创建头节点
	assert(HeadNode);                              //判定是否创建成功,不成功则assert函数结束程序抛出异常位置
	HeadNode->next = NULL;                         //头节点下一个置空
	return HeadNode;                               //返回头节点地址
}

LPNODE createNode(DATA data)                      //创建节点的模型
{
	LPNODE newNode = (LPNODE)malloc(sizeof(NODE));//创建节点
	assert(newNode);                              //对节点属性的操作
	newNode->data = data;
	newNode->next = NULL;
	return newNode;                               //返回节点地址
}

void printfList(struct Node * list)
{
	LPNODE pmove = list->next;                   //建立临时指针指向头节点地址 
	while (pmove != NULL)
	{
		printf("%d\t",pmove->data);              //输出节点的数据
		pmove = pmove->next;                     //指针后移
	}
	printf("\n");
}

void push_sort(struct Node * list, DATA data)     //入栈
{
	LPNODE newNode = createNode(data);
	LPNODE proNode = list;
	LPNODE curNode = list->next;
	while (curNode != NULL&&curNode->data <= data)
	{
		proNode = curNode;
		curNode = curNode->next;
	}
	if (curNode == NULL&&proNode == list)
	{
		list->next = newNode;                  //头插法,不断将list->next指向现在的新节点
	}
	else if (curNode == NULL&&proNode != list)
	{
		proNode->next = newNode;
	}
	else
	{
		proNode->next = newNode;
		newNode->next = curNode;
	}
}

void reverse(LPNODE list)              //反转
{
	//链表空,或者只有一个节点
	if (list == NULL||list->next == NULL || list->next->next == NULL)
	{
		return;
	}
	LPNODE proNode = NULL;
	LPNODE curNode = list->next;                   //curNode指向现在的节点
	LPNODE surList = curNode->next;                //surList指向现节点的下一个节点
	while (surList != NULL)
	{
		//当前节点的下一个节点的值置为临时指针的值,临时指针的值修改为当前节点的值
		curNode->next = proNode;                   
		proNode = curNode;          

		//当前节点的值修改为当前节点下一个的值surNodew,surNode再次获取新的当前节点下一个的值
 		curNode = surList;                         
		surList = curNode->next;
	}
	//当前节点下一个的值修改为临时指针存放的之前的当前节点的值
	curNode->next = proNode;
	list->next = curNode;
}

void mergeList(LPNODE list1, LPNODE list2)
{
	LPNODE pmove = list2->next;
	while (pmove != NULL)
	{
		push_sort(list1, pmove->data);//将list2的数据插入list1,当有序链表进行合并等,链表会进行自动冒泡排序
		pmove = pmove->next;
	}
}

int main()
{
	srand((unsigned int)time(NULL));
	LPNODE list = createList();
	for (int i = 0; i <= 10; i++)
	{
		push_sort(list, rand()%100);
	}
	printfList(list);

	reverse(list);
	printfList(list);

	LPNODE list1 = createList();
	push_sort(list1, 7);
	push_sort(list1, 5);
	push_sort(list1, 3);
	LPNODE list2 = createList();
	push_sort(list2, 2);
	push_sort(list2, 4);
	push_sort(list2, 6);
	mergeList(list1, list2);
	printfList(list1);
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-02-01 20:51:59  更:2022-02-01 20:52:44 
 
开发: 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 18:45:26-

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