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 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构:单链表逆置 -> 正文阅读

[数据结构与算法]数据结构:单链表逆置

实验要求:

写出将单链表逆置的算法。即令单链表的第一个结点变为最后一个结点,第二个结点变为倒数第二个结点,…,最后一个结点变为第一个结点。

依次从键盘读入数据,逆序建立链表L;

逆置链表L(创建新的链表New保存逆置的结点);


代码解析:

主函数int main():

定义链表的长度n;

调用CreateList函数创建长度为n的链表;

调用InvertList函数将链表内元素转置并输出;

定义链表的结构体类型为LNode,规定结点的数据域和结点的指针域

定义函数struct LNode *CreatList(int n)逆位序创建链表并输出所创建的链表的元素值。

定义需要创建的链表元素个数n;

建立一个带头结点的单链表;

逆序位输入指定元素个数的链表元素数值;

输入逆序位建立链表的链表元素;

定义函数void InverList(struct LNode *L)转置链表内元素并输出。

建立一个带头结点的新链表r;

q指向链表的第一个元素;

开辟新结点s,将q的值赋给s;

令s->next为NULL并使其成为r的后续结点;

利用while循环,将q不断后移,指向链表的后续元素。开辟新结点p将q的值?????????赋给p,将p插入结点s和结点i中间;

令s的指针指向p;

输出转置后的链表;


实验代码:

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

//定义链表类型
struct LNode{
	int data;                                             //结点的数据域
	struct LNode *next;                                   //结点的指针域
};


//创建逆序链表
struct LNode *CreatList(int n)
{
	struct LNode *L,*p;
	printf("请输入逆序创建链表的元素的个数:\n");           //确定链表元素的个数
	scanf("%d",&n);
	L = (struct LNode*)malloc(sizeof(struct LNode));       
	L->next  = NULL;                                       //建立一个带头结点的单链表
	printf("请输入逆序链表元素:\n");
	while(n--){                                            //逆序位输入n个元素的数值
		p=(struct LNode*)malloc(sizeof(struct LNode));     
		scanf("%d",&p->data );                             //输入指定元素个数的链表元素数值
		p->next = L->next ;
		L->next =p;
	}
	printf("输出链表中的元素:\n");                         //直接输出所创建的逆序链表
	while(p!=NULL)
	{
		if(p->next ==NULL)
			printf("%d\n",p->data );
		else
			printf("%d\t",p->data );
		p=p->next ;
	}
	return L;
}


//转置链表内元素并输出
void InvertList(struct LNode *L)
{
	struct LNode *p,*q,*r,*s,*t;
	r = (struct LNode*)malloc(sizeof(struct LNode));     
	s = (struct LNode*)malloc(sizeof(struct LNode));
	r->next=NULL;                                         //建立一个带头结点新链表
	q=L->next;                                            //q指向链表第一个元素           
	s->data=q->data;
	s->next=NULL;
	r->next=s;
	while(q->next !=NULL)                                 
	{
		q=q->next;
    	p = (struct LNode*)malloc(sizeof(struct LNode));
    	p->data=q->data;
    	p->next=s;
    	r->next=p;
    	s=p;
	}
	printf("输出转置后的链表:\n");
	t=r->next;                              
	while(t!=NULL)                                        //直接输出转置后的链表            
	{
		printf("%d\t",t->data );
		t=t->next ;
	}
	printf("\n");
}


//主函数
int main()
{
	int n;
	struct LNode *L;
	L=CreatList(n);
	InvertList(L);
}

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

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