链表操作大全

单链表的基本操作大全之C语言实现(一) 单链表的基本操作大全之C语言实现1. 单链表的定义链表是通过一组任意的存储单元来存储线性表中的数据元素,这些存储单元可以是连续的也可以是不连续的。为了建立起数据元素之间的关系,对于每个数据元素除了存放数据元素自身的信息外,还必须有包含的指示该元素直接后继元素存储位置的信息,这两部分信息组成一个结点,即每个结点都有至少包括两个域,一个域存储数据元素信息,称为数据域,另一个域存储直接后继的地址,称为指针 阅读详情

转载:http://www.diybl.com/course/3_program/c/csuanfa/2007213/21577.html

#include "iostream.h"

#include "iomanip.h"

 

typedef int ElemType;

 

typedef struct ADTList

{

 ElemType Elem;

 struct ADTList *next;

}ADTList;

////////////////////////////////////////

//链表功能函数

bool InitList(ADTList *&L);

void DestroyList(ADTList *L);

void ClearList(ADTList *L);

bool ListEmpty(ADTList *L);

long ListLength(ADTList *L);

bool GetElem(ADTList *L,long index,ElemType& e);

long LocateElem(ADTList *L,ElemType e);

  int compare(ElemType elem1,ElemType elem2);

bool PriorElem(ADTList *L,ElemType cur_e,ElemType& pre_e);

bool NextElem(ADTList *L,ElemType cur_e,ElemType& next_e);

bool ListInsert(ADTList *L,long index,ElemType e);

bool ListDelete(ADTList *L,long index,ElemType& e);

bool visit(ElemType elem);

bool ListTraverse(ADTList *L);

///////////////////////////////////////

//测试用函数

bool create(ADTList *L);

bool create1(ADTList *L);

bool deleteTest(ADTList *L);

///////////////////////////////////////

int main(int argc,char **argv)

{

 ADTList *list;

 list=NULL;

 

 cout<<"链表实验程序"<///////////////////////////////////////

 cout<<"List Init:"< if(!InitList(list))

  return 1;

///////////////////////////////////////

 if(!create(list))

  return 1;

 cout< if(!ListTraverse(list))

  return 1;

///////////////////////////////////////

 cout< ClearList(list);

 cout< if(!ListTraverse(list))

  return 1;

///////////////////////////////////////

 if(!create1(list))

  return 1;

 cout< if(!ListTraverse(list))

  return 1;

///////////////////////////////////////

 deleteTest(list);

///////////////////////////////////////

 

 return 0; 

}

 

//以下是验证链表功能的函数

bool deleteTest(ADTList *L)

{

 ElemType e;

 cout< cout<<"delete the 1th node:"< ListDelete(L,1,e);

 cout<<"e="< cout<<"The list:"< ListTraverse(L);

 cout< ListDelete(L,2,e);

 cout<<"e="< cout<<"The list:"< ListTraverse(L);

 cout< ListDelete(L,ListLength(L),e);

 cout<<"e="< cout<<"The list:"< ListTraverse(L);

 return true;

}

bool create1(ADTList *L)

{

 int i;

 cout< for(i=1;i<=100;i++)

 {

  if(!ListInsert(L,i,i))

   return false;

 }

 return true;

}

bool create(ADTList *L)

{

 ElemType cur;

 int i,num;

 

 cout<<"新建一个链表"< do

 {

  cout<<"请输入链表的结点数:";

  cin>>num;

 }while(num<1);

 cout< for(i=1;i<=num;i++)

 {

  cout<<"请输入"<  cin>>cur;

  if(!ListInsert(L,i,cur))

   return false;

 }

 return true;

}

 

//以下是链表功能的实现函数

bool InitList(ADTList *&L)

{

 ADTList *p;

 p=NULL;

 if((p=new(ADTList))==NULL)

  return false;

 p->next=NULL;

 L=p;

 return true;

}

void DestroyList(ADTList *L)

{

 ADTList *p;

 while(L->next)

 {

  p=L;

  L=L->next;

  delete(p);

 }

}

void ClearList(ADTList *L)

{

 ADTList *p,*q;

 p=L->next;

 while(p)

 {

  q=p;

  p=p->next;

  delete(q);

 }

 L->next=NULL;

}

bool ListEmpty(ADTList *L)

{

 if(L->next)

  return true;

 else

  return false;

}

long ListLength(ADTList *L)

{

 long length=0;

 ADTList *p;

 p=L->next;

 while(p)

 {

  length++;

  p=p->next;

 }

 return length;

}

bool GetElem(ADTList *L,long index,ElemType& e)

{

 if(index<1 || index>ListLength(L))

  return false;

 long i;

 ADTList *p=L;

 for(i=1;i<=index;i++)

  p=p->next;

 e=p->Elem;

 return true;

}

int compare(ElemType elem1,ElemType elem2)

{

 if(elem1==elem2)

  return 0;

 else if(elem1>elem2)

  return 1;

 else

  return -1;

}

 

long LocateElem(ADTList *L,ElemType e)

{

 ADTList *p;

 long locate=0;

 p=L->next;

 while(p)

 {

  locate++;

  if(compare(e,p->Elem)==0)

  {

 

   return locate;

  }

  p=p->next;

 }

 return 0;

}

bool PriorElem(ADTList *L,ElemType cur_e,ElemType& pre_e)

{

 ADTList *p;

 long location;

 location=LocateElem(L,cur_e);

 if(location<=1)

  return false;

 p=L->next;

 location--;

 while(location)

 {

  location--;

  p=p->next;

 }

 pre_e=p->Elem;

 return true;

}

 

bool NextElem(ADTList *L,ElemType cur_e,ElemType& next_e)

{

 ADTList *p;

 long location;

 location=LocateElem(L,cur_e);

 if(location>=ListLength(L)-1)

  return false;

 location++;

 while(location)

 {

  location--;

  p=p->next;

 }

 next_e=p->Elem;

 return true;

}

bool ListInsert(ADTList *L,long index,ElemType e)

{

 if(index<1 || index>ListLength(L)+1)

  return false;

 ADTList *p,*q;

 long i;

 if((q=new(ADTList))==NULL)

  return false;

 q->Elem=e;

 q->next=NULL;

 p=L;

 for(i=1;i  p=p->next;

 q->next=p->next;

 p->next=q;

 return true;

}

bool ListDelete(ADTList *L,long index,ElemType& e)

{

 if(index<1 || index>ListLength(L))

  return false;

 long i;

 ADTList *p,*q;

 p=L;

 for(i=1;i  p=p->next;

 e=p->next->Elem;

 q=p->next;

 p->next=p->next->next;

 delete(q);

 return true;

}

bool visit(ElemType elem)

{

 cout< return true;

}

bool ListTraverse(ADTList *L)

{

 ADTList *p;

 p=L->next;

 

 while(p)

 {

  if(!visit(p->Elem))

   return false;

  p=p->next;

 }

 return true;

}

 

 

MATLAB演示元胞自动机算法 一、元胞自动机理论 元胞自动机与格子理论是一个非常好的模型,许多复杂的问题都可以通过它来建立模型,下面就简要介绍一下。 元胞自动机 实质上是定义在一个具有离散、有限状态的元胞组成的元胞空间上,并按照一定的局部规则,在离散的时间维度上演化的动力学系统。 元胞 元胞又可称为单元、细胞,是元胞自动机的最基本的组成部分。 元胞具有以下特点: 元胞自动机最基本的单元。 元胞有记忆贮存状态的功... 阅读详情

相关推荐

学习笔记——神经科学的数学基础

m%3D2X_%7Bi%7DiNy%3DAxW%3DABx_%7Bj%7Dy_%7Bi%7Dy%3DWxt=N7T8卷积神经网络(CNN)详细介绍及其原理详解_IronmanJay的博客-优快云博客https://blog.youkuaiyun.com/IronmanJay/article/details/128689946?

zxyopenstar的博客 1374

必须要掌握的单链表操作大全

前言 号外号外,笔者最近在系统整理一些 Java 后台方面的面试题和参考解答,有找工作需求的童鞋,欢迎关注我的 Github 仓库,如果觉得不错可以点个 star 关注 : 1、awesome-java-interview 2、awesome-java-notes 链表相关的各种常用操作实现方法 经常刷 leetcode 的童鞋一定对单链表的各种骚操作不陌生,单链表可以玩出各种各样的骚操作,掌...

樱木天亥 646

卡尔曼滤波五步拆解:用Excel手推姿态解算全过程

本文通过Excel手推演示,详细拆解了卡尔曼滤波在姿态解算中的五步核心流程。文章以融合陀螺仪与加速度计数据估算角度为例,从状态预测、协方差更新到增益计算,逐步展示如何将抽象的矩阵运算转化为可视化的表格计算,帮助读者直观理解滤波器的“预测-修正”机制,并为算法实现与参数调优提供清晰指导。

hhh00的博客 978

Linux中内核操作链表的函数大全

Linux中内核操作链表的函数大全 struct list_head : 链表结构体的指针的数据结构 LIST_HEAD_INIT: 用于初始化这个头部编成独立结点 INIT_LIST_HEAD(ptr) : 将这个指针初始化为孤立的结点 LIST_HEAD(name) : 初始化一个变量为name, 并且初始化 list_add(struct list_head *new, struct lis...

cxy504的博客 386

Hermes Dashboard Web 端部署完整说明

通过反向代理(nginx)使用公网域名访问时,会遇到 Host 头校验、CORS 跨域、WebSocket 连接拒绝三个核心问题。本文档记录了完整的源码修改方案和部署步骤。确保 nginx 主配置加载了 WebSocket map(宝塔默认为。路径的公开访问(无需登录),其他路径仍受 Cookie 认证保护。Hermes Dashboard 默认绑定。访问站点时会先弹出浏览器密码框,输入用户。在 nginx 反向代理配置中的。环境变量动态读取允许的域名。nginx 配置中已添加。

大白菜代码的博客 805

别再让电池充不满!用CN3791芯片设计太阳能充电电路,这几个调试坑我帮你踩了

本文详细解析了使用CN3791芯片设计太阳能充电电路时的常见调试问题及解决方案。从RCS电阻的选择到MPPT电压偏差的修正,再到线路损耗和温度补偿的优化,提供了全面的避坑指南。通过实测数据和优化方案,帮助工程师提升锂电池充电效率,确保太阳能充电电路的稳定性和可靠性。

weixin_42528191的博客 240

哈希链表 操作大全 实现

哈希链表 操作大全 实现 //------------------------------Struct.h----------------------  #define MAX 100 struct ElemStruct {  char str[MAX];  char info[MAX];  ElemStruct *next; }; struct TableStruct {

我和我追逐的梦~~~ 1480

保姆级教程:用Fiddler+夜神模拟器搞定抖音App抓包(附SSL Pinning绕过实战)

本文提供了一套完整的移动端抓包解决方案,详细介绍了如何使用Fiddler和夜神模拟器进行抖音App抓包,并重点讲解了SSL Pinning绕过技术。通过Xposed框架和JustTrustMe模块的组合,实现高效抓包,适用于产品分析、竞品研究和安全测试等场景。

weixin_30855099的博客 422

C语言链表操作大全

#include<stdio.h> #include<stdlib.h> typedef int ElementType; typedef struct Node{ ElementType data; struct Node *next; }Node, *LinkList; /*LinkList为结构指针类型*/ LinkList createList();/...

梦溪笔谈的博客 542

IBM AC922 8335-GTW 安装linux,CentOS,ubuntu,RHEL各种坑

AC922

u011970286的专栏 894

【WorkBuddy专栏25】如何选择大模型——积分消耗、用途场景、选型决策全指南

【WorkBuddy专栏25】如何选择大模型——积分消耗、用途场景、选型决策全指南

AI人人懂 936

C++链表基础操作大全

目录:  (1)建立有序链表,已0结束:输入一组数,输入为0,停止,按着从小到大的顺序输出(2)倒序输出(链表):随机输入一组数据,当输入为0时结束,然后逆序输出(3)在有序链表中加一个数,是链表成为创新的有序链表:  (4) 输入N个数,再输入一个数,查找该数据最早的位置*(1)建立有序链表,已0结束:输入一组数,输入为0,停止,按着从小到大的顺序输出样例输入:3 6 5 2 9 4 0样例输出...

quhongjuan12的博客 458

AUTOSAR CP R18-10 架构总览与导航

AUTOSAR CP R18-10 架构总览 本文档系统整理了AUTOSAR CP R18-10版本的199篇技术规范,涵盖7大架构层级: 应用层(15篇):包含车身舒适、底盘控制、HMI、安全系统、动力系统等AI应用 RTE(1篇):虚拟功能总线规范 服务层(159篇):细分为系统服务(OS/ECU管理/加密)、存储服务、通信服务(CAN/LIN/Ethernet) ECU抽象层(20篇):I/O与通信硬件抽象 MCAL(41篇):微控制器驱动层 复杂驱动(14篇):CDD设计与SPAL支撑 规范模板(2

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 721

c语言链表操作代码大全

标题//链表的创建,遍历,删除,插入,排序以及修改链表节点的值 #include"stdio.h" #include"malloc.h" typedef struct student { float score; struct student *next; }linklist; linklist *create_list(int n); void traverse_list(linklist *head);//遍历函数声明 sort_list(linklist * head,int len);//排序函数申

weixin_46663054的博客 570

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

单链表操作大全C语言实现

单链表的操作一般包括:建立,删除节点,插入节点,链表反转 1.单链表建立,包括从终端输入和由数组转换而来两种: typedef struct node { int num; struct node * next; }Node,*pNode; pNode CreateLink() { pNode head=(pNode)malloc(sizeof(Node));

TinyFisher的专栏 962

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

单链表操作大全

转载的博客园的一篇//--http://www.cnblogs.com/wangzhi/p/3373268.html #include #include typedef struct node { int nDate; struct node *pstnext; }Node; //链表输出 void output(Node *head)

faguoduifangui的博客 502

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

双向链表操作大全C语言实现

双向链表的操作和单链表很像,主要包括创建,删除,插入;只要注意下指针的操作即可,废话不多说,直接上代码:typedef struct dnode { int num; struct dnode *pre; struct dnode *next; }Dnode,*pDnode; pDnode Create() //用户输入创建,-1表示结束 { pDnode he

TinyFisher的专栏 867

链表操作大全 C语言版

本人刚学链表,一开始遇到了很多问题,看了很久才略懂一二,有一些体会全都写在了代码里,水平有限,请各位批评改正。。 #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; typedef int ElementType; typedef struct node List; struct node{ int data; List* next;...

wmzclever的博客 248

单链表的十大操作(C语言版)基础操作大全

#include <stdio.h> #include <stdlib.h> typedef struct Node { int data; struct Node *next; }Node,*LinkList; void Initiate(Node *L) //初始化单链表,创建一个头结点 { L->next=NULL; print...

qq_41635401的博客 265

如何用免费开源的 QuickRecorder 完成 macOS 屏幕录制:从安装到出片的完整实操

录一段带系统声音的屏幕视频,往往要装虚拟声卡、来回切窗口选区、再调半天音量,折腾完还要看商业软件的订阅账单。QuickRecorder 是一个免费开源的 macOS 录屏工具,基于苹果原生的 ScreenCapture Kit 框架开发,一个不到 10MB 的轻量应用就把整件事做完:内录系统声音不用装任何驱动,一个主面板涵盖七种录制入口,录制、暂停、裁剪全在本地完成,无广告、无水印。 ## 一句

gitblog_00809的博客 310
上一篇: c++文件操作
下一篇: 二叉树的三叉链表存储
K行天下
博客等级 码龄19年 358粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值