C语言如何实现链表逆序并输出
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章主要介绍了C语言如何实现链表逆序并输出的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言如何实现链表逆序并输出文章都会有所收获,下面我们一起来看看吧。C语言数据
千家信息网最后更新 2025年01月20日C语言如何实现链表逆序并输出
这篇文章主要介绍了C语言如何实现链表逆序并输出的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言如何实现链表逆序并输出文章都会有所收获,下面我们一起来看看吧。
C语言数据结构实现链表逆序并输出
将一个链表逆序并输出。我用了两种方法来实现,第一种是借助了一个新的空链表;第二种是在原来链表的基础上直接实现逆序。
实例代码:
头文件:
#include#include #include typedef int ElemType; typedef struct Node {//结点结构 ElemType value; //值域 struct Node *next;//指针域 }Node,*ptr_Node; typedef struct LinkList {//链表结构 ptr_Node head; //链表头结点指针 ptr_Node tail;//链表尾结点指针 int length; //链表长度 }LinkList,*ptr_LinkList; ptr_LinkList CreateList(void) {//创建一个空链表 ptr_LinkList linklist; linklist=(LinkList *)malloc(sizeof(LinkList)); if(!linklist) { printf("allocation failed.\n"); } linklist->head=NULL; linklist->tail=NULL; linklist->length=0; return linklist; } bool IsListEmpty(ptr_LinkList linklist) {//判断链表是否为空 if(linklist->length==0) { return true; } return false; } void InsertListHead(ptr_LinkList linklist,ElemType element) {//在表头插入值为element的结点作为新的表头 ptr_Node ptr_node; ptr_node=(Node *)malloc(sizeof(Node)); //生成插入结点 if(!ptr_node) { printf("allocation failed.\n"); } else { ptr_node->value=element; if(linklist->length==0) { linklist->head=ptr_node; linklist->tail=linklist->head; linklist->tail->next=NULL; } else { ptr_node->next=linklist->head; linklist->head=ptr_node; //链表头 } linklist->length++; //链表长度加1 } } void InsertListTail(ptr_LinkList linklist,ElemType element) { ptr_Node ptr_node; ptr_node=(Node *)malloc(sizeof(Node)); //生成插入结点 if(!ptr_node) { printf("allocation failed.\n"); } else { ptr_node->value=element; if(linklist->length==0) { linklist->head=ptr_node; linklist->tail=linklist->head; linklist->tail->next=NULL; } else { linklist->tail->next=ptr_node; linklist->tail=ptr_node; //链表尾 } linklist->length++; //链表长度加1 } } void InsertListPosition(ptr_LinkList linklist,int pos,ElemType element) { int i; ptr_Node ptr_node; ptr_Node temp_ptr_node; if(pos<1 || pos>linklist->length) { printf("The insert position is invalidate.\n"); } else { ptr_node=(Node *)malloc(sizeof(Node)); //生成插入结点 if(!ptr_node) { printf("allocation failed.\n"); } ptr_node->value=element; if(pos==1) { InsertListHead(linklist,element); } else if(pos==linklist->length) { InsertListTail(linklist,element); } else { temp_ptr_node=linklist->head; for(i=1;i next; } ptr_node->next=temp_ptr_node->next; temp_ptr_node->next=ptr_node; linklist->length++; } } } void Destroy(ptr_LinkList linklist) {//销毁链表 ptr_Node p=linklist->head; ptr_Node q; while(p) {//释放每个结点空间 q=p->next; free(p); p=NULL; p=q; } } void Traverse(ptr_LinkList linklist) {//输出整个链表 ptr_Node p; p=linklist->head; while(p) { printf("%4d",p->value); p=p->next; } }
头文件中实现了链表的几个基本的操作,有的是必须的,有些是非必须的。
实现代码:
#include "stdafx.h" #include "LinkList.h" #includeptr_LinkList InvertList(ptr_LinkList list) {//该方法借助一个新的空链表来实现链表逆序 ptr_LinkList inverted_linklist; ptr_Node p; p=list->head; inverted_linklist=CreateList();//创建一个空链表 while(p) {//将list链表中的结点值逆序输入新创建的链表中,实现链表反转 InsertListHead(inverted_linklist,p->value); p=p->next; } return inverted_linklist; } void InvertLinkList(ptr_LinkList linklist) {//该方法直接对原有链表实现逆序,不借助其他链表 ptr_Node p,q,r,m; m=p=linklist->head; q=p->next; r=q->next; while(r) {//依次对链表中的结点进行反转 q->next=p; p=q; q=r; r=r->next; } q->next=p; //最后一个结点反转 linklist->head=q; linklist->tail=m; linklist->tail->next=NULL; } int _tmain(int argc, _TCHAR* argv[]) { ptr_LinkList linklist; ptr_LinkList list; linklist=CreateList(); if(linklist) { printf("We have created a new linklist.\n"); } InsertListHead(linklist,12); InsertListHead(linklist,35); InsertListHead(linklist,66); InsertListHead(linklist,06); InsertListHead(linklist,11); InsertListHead(linklist,54); InsertListHead(linklist,79); Traverse(linklist); printf("\n"); printf("The first method:\n"); list=InvertList(linklist); Traverse(list); printf("\n"); printf("The second method:\n"); InvertLinkList(linklist); Traverse(linklist); printf("\n"); getch(); return 0; }
关于"C语言如何实现链表逆序并输出"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"C语言如何实现链表逆序并输出"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
结点
逆序
输出
语言
表头
指针
方法
知识
结构
长度
生成
代码
内容
文件
篇文章
有的是
价值
值域
基础
实例
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
朵夫河服务器在哪
客户说软件开发价格高
证券软件开发概念股
数据库增删改主要技术
网络安全相关培训职业前景好
互联网科技创新的优势
网上购买服务器靠谱吗
北京海量数据库怎么样
h1z1北美服务器
张店crm软件开发服务
在数据库中set什么意思
山东交友软件开发多少钱
微客派系统软件开发
rrd数据库优劣势
软件开发特殊工序
软件开发需要四级证吗
set服务器上文件怎么下载
银行卡数据库下载
avast网络安全许可文件
数据库常见威胁有哪些
blog数据库设计
电脑计算机网络技术教程
自主可控服务器的应用
手机网络安全提醒
奇迹世界经典服务器认证没有响应
服务器8核cpu对应hZ
数据库如何生成容器对象
嗯计算机网络技术
文件版本管理服务器
曲靖红河互联网科技