双链表的基本运算

2024-05-10 22:58
文章标签 基本 运算 双链

本文主要是介绍双链表的基本运算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

代码:


#include<stdio.h>
#include<malloc.h>
typedef char ElemType;
typedef struct DNode
{ElemType data;struct DNode *prior;struct DNode *next;
}DLinkList;
//初始化
void InitList(DLinkList * &L)
{L=(DLinkList *)malloc(sizeof(DLinkList));L->prior=L->next=NULL;
}
//销毁双链表
void DestroyList(DLinkList *L)
{DLinkList *p=L,*q=p->next;while(q!=NULL){free(p);p=q;q=p->next;}free(p);
}
//判断链表是否为空
bool ListEmpty(DLinkList *L)
{return(L->next==NULL);
}
//双链表的长度
int ListLength(DLinkList *L)
{DLinkList *p=L;int i=0;while(p->next!=NULL){i++;p=p->next;}return i;
}
//输出双链表
void DispList(DLinkList *L)
{DLinkList *p=L->next;while(p!=NULL){printf(" %c ",p->data);p=p->next;}printf("\n");
}
//求双链表中的某个元素的值
bool GetElem(DLinkList *L,int i,ElemType &e)
{int j=0;DLinkList *p=L;while(j<i && p!=NULL){j++;p=p->next;}if(p==NULL)return false;else{e=p->data;return true;}}
//按元素值查找
int LocateElem(DLinkList *L,ElemType e)
{int n=1;DLinkList *p=L->next;while(p!=NULL && p->data!=e){n++;p=p->next;}if(p==NULL)return 0;elsereturn n;
}
//插入元素
bool ListInsert(DLinkList * &L,int i,ElemType e)
{int j=0;DLinkList *p=L,*s;while(j<i-1 && p!=NULL){j++;p=p->next;}if(p==NULL)return false;else{s=(DLinkList *)malloc(sizeof(DLinkList));s->data=e;s->next=p->next;if(p->next!=NULL)p->next->prior=s;s->prior=p;p->next=s;return true;}
}
//删除数据元素
bool ListDelete(DLinkList * &L,int i,ElemType &e)
{int j=0;DLinkList *p=L,*q;while(j<i-1 && p!=NULL){j++;p=p->next;}if(p==NULL)return false;else{q=p->next;if(q==NULL)return false;e=q->data;p->next=q->next;if(p->next!=NULL)p->next->prior=p;free(q);return true;}
}
void main()
{DLinkList *h;ElemType e;printf("双链表的基本运算如下:\n");printf(" (1)初始化双链表h\n");InitList(h);printf(" (2)依次采用尾插法插入a,b,c,d,e元素\n");ListInsert(h,1,'a');ListInsert(h,2,'b');ListInsert(h,3,'c');ListInsert(h,4,'d');ListInsert(h,5,'e');printf(" (3)输出双链表h:");DispList(h);printf(" (4)双链表的长度=%d\n",ListLength(h));printf(" (5)双链表h为%s\n",(ListLength(h)?"空":"非空"));GetElem(h,3,e);printf(" (6)双链表h的第三个元素=%c\n",e);printf(" (7)元素a的位置=%d\n",LocateElem(h,'a'));printf(" (8)在第四个元素上插入f元素\n");ListInsert(h,4,'f');printf(" (9)输出双链表h:");DispList(h);printf(" (10)删除h的第三个元素\n");ListDelete(h,3,e);printf(" (11)输出双链表h:");DispList(h);printf(" (12)释放双链表h\n");DestroyList(h);
}

运行结果:


这篇关于双链表的基本运算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/977804

相关文章

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

MySQL 中的 LIMIT 语句及基本用法

《MySQL中的LIMIT语句及基本用法》LIMIT语句用于限制查询返回的行数,常用于分页查询或取部分数据,提高查询效率,:本文主要介绍MySQL中的LIMIT语句,需要的朋友可以参考下... 目录mysql 中的 LIMIT 语句1. LIMIT 语法2. LIMIT 基本用法(1) 获取前 N 行数据(

Python Faker库基本用法详解

《PythonFaker库基本用法详解》Faker是一个非常强大的库,适用于生成各种类型的伪随机数据,可以帮助开发者在测试、数据生成、或其他需要随机数据的场景中提高效率,本文给大家介绍PythonF... 目录安装基本用法主要功能示例代码语言和地区生成多条假数据自定义字段小结Faker 是一个 python

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(