c语言 建立线性表 链式

c语言建立线性表(顺序储存,链式储存,循环,双向)全 c语言建立线性表 顺序储存 储存结构 初始化(建立)顺序表 查找操作 一、按值查找,找到返回对应的下标 二、按照下标返回元素 插入操作 一、在线性表尾部添加元素 二、在位置i处插入元素 三、顺序表(有序)插入,(如都是由小到大) 删除操作 一、删除位置i的元素,删除成功后,返回删除的值 二、删除值为val的第一个元素,没有返回-1 三、在非递减有序的有序表中删除多余的相同元素 其余操作 一、将线性表中的所有元素转置 二、两个有序的顺序表合并后任然有序 完整代码 链式储存 存储结构 建立链表 一、尾插法建立 阅读详情

1.实验目的及要求
通过本实验,进一不了解线性表的操作,熟悉线性表的运算,了解链式存储结构的实现方法和在链式存储条件下实现线性的相关操作。
2.实验内容
用C 语言设计在链式存储结构下,建立、插入、删除、访问及输出线性表的程序。
3.实验类型:验证性实验。

#include
#include
typedef char elemtype;
typedef struct dnode
{elemtype data;
struct dnode *prior;
struct dnode *next;
}dlinklist;


void displist(dlinklist *L);
int listlength(dlinklist *L);
void list (void);
void initlist (dlinklist *&L);
void destorylist (dlinklist *L);
int listempty(dlinklist *L);
void listdelete (dlinklist *L,int i,elemtype &e);
void getelem (dlinklist *L,int i, elemtype &e);
int locateelem(dlinklist *L,elemtype e);
int listinsert (dlinklist *L,int i, elemtype e);



#include "head.h"
int length;
#include "head1.h"
int main (void)
{char ch;
dlinklist *L;
elemtype e;
int i;
while(1)
{list();
     ch=getchar();getchar();
  switch(ch)
  {case '0': exit(0);
   case '1': initlist(L);break;
   case '2': destorylist(L);break;
   case '3': printf("The length is %d\n",listlength(L));break;
   case '4': if(listempty(L)) printf("表不空!\n");
           else printf("表空!\n");break;
   case '5': printf("请输入要取的元素的序号(1-%d)\n",length);scanf("%d",&i);getchar();
           if(i>length)printf("只有%d个元素\n",length);
            else if(length==0) printf("空表!\n");
         else {getelem(L,i,e);printf("第%d个元素为%c\n",i,e);}break;
   case '6': printf("请输入要找的元素\n"); scanf("%c",&e);getchar();i=locateelem(L,e);
          if(i==0) printf("未找到!\n");
           else printf("%c为第%i个元素\n",e,i);break;
   case '7': printf("请输入要插入的元素及其序号(1-%d)\n",length+1);
          scanf("%c%d",&e,&i);getchar();
      if(listinsert(L,i,e))
         printf("插入成功!\n");
      else printf("插入失败!\n");break;
   case '8': if(!listempty(L)) printf("空表\n");
           else displist(L);break;
   case '9': printf("请输入要删除的元素的序号:\n"); scanf("%d",&i);getchar();
          if (i>length)  printf("只有%d个元素!\n",length);
          listdelete(L,i,e); printf("删除的元素为%c\n",e); break;
   default: printf("输入错误!请重新输入\n");
  }
}
return 0;
}
#include
void list (void)
{printf("***************************************\n");
printf("1: 初始化链表               2: 释放链表\n");
printf("3: 求元素个数               4: 链表判空\n");
printf("5: 取第i 元素               6: 找元素e \n");
printf("7: 插入元素e                8: 输出链表\n");
printf("9: 删除第i 元               0: 退出程序\n");
printf("***************************************\n");
printf("       请在上述功能中选择(0-9):");
}

#include"head.h"
extern int length;
void destorylist (dlinklist *L)
{ dlinklist *p=L->next;
if (length!=0)
{while(p!=L)
    {L->next=p->next;
     p->next->prior=L;
     free(p);p=L->next;
  }
length=0;
}
}



void displist(dlinklist *L)
{dlinklist *p=L->next;
while(p!=L)
{printf("%c  ",p->data); p=p->next;}
printf("\n");
}

void getelem (dlinklist *L,int i, elemtype &e)
{int j=1;dlinklist *p=L->next;
while(p!=L&&j
{p=p->next;j++;}
e=p->data;
}
extern int length;
void initlist (dlinklist *&L )
{
L=(dlinklist *)malloc(sizeof(dlinklist));
if(!L)
printf("初始化失败!\n");
else
{length=0;L->next=L->prior=L;}
}

void listdelete (dlinklist *L,int i,elemtype &e)
{dlinklist *p=L->next;
int j=1;
while(p!=L&&j

{p=p->next;j++;}
if(j==i)
{p->prior->next=p->next;
p->next->prior=p->prior;
e=p->data;free(p);
length--;}
}

int listempty(dlinklist *L)
{
int i=0;
dlinklist *p=L->next;
     while(p!=L)
  {p=p->next;i++;}
  return i;
}

int listinsert (dlinklist *L,int i, elemtype e)
{dlinklist *p=L->next,*q;int j=1;
  while(p!=L&&j
  {p=p->next;j++;}
  if(j==i)
{q=(dlinklist *)malloc(sizeof(dlinklist));
     if(!q) return 0;
  q->data=e; length++;
  q->prior=p->prior;
  p->prior->next=q;
  q->next=p;
  p->prior=q;
  return 1;
  }
  else return 0;
}

int listlength(dlinklist *L)
{return length;
}

int locateelem(dlinklist *L,elemtype e)
{dlinklist *p=L->next;
int i=1;
while(p!=L&&p->data!=e)
{p=p->next;i++;}
if(p->data!=e)return 0;
else return i;
}

 

 

2》有人说上面的太繁琐,看不懂。好吧来个简单的创建删除插入

#include <iostream.h>
#include <malloc.h> //Using malloc and realloc
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define TRUE true
#define FALSE false
#define ElemType int
 
typedef struct 
{
ElemType *elem; //数据元素的基地址
int length; //线性表的当前长度
int listsize; //当前分配的存储容量
}SqList;

bool InitList_Sq (SqList &L)
{ //malloc和new的区别请看说明1
  L.elem =(ElemType*) malloc(LIST_INIT_SIZE*sizeof(ElemType));//分配空间
//L.elem=new ElemType[LIST_INIT_SIZE]; //分配空间
if (!L.elem) return FALSE;
L.length=0; //将当前线性表长度置0
L.listsize=LIST_INIT_SIZE;
return TRUE;//成功返回OK 
}

void DestroyList_Sq(SqList &L)
{
if (L.elem) free(L.elem); //释放线性表的存储空间
L.elem=NULL;
L.length=0;
L.listsize=0;
}


void ClearList_Sq (SqList &L) //清空线性表L
{
L.length=0; //将线性表的长度置为0
}

bool ListEmpty_Sq (SqList &L)//判断线性表L是否为空
{
  if (L.length==0) return TRUE;  
  else return FALSE;
}
  
int ListLength_Sq (SqList &L)//求线性表L的长度
{
  return (L.length);  
}

ElemType GetElem_Sq (SqList &L, int i)//获取线性表L中的某个数据元素的内容
{
ElemType e;
  if (i<0||i>L.length) return FALSE;//失败返回i值不合法; 
  e=L.elem[i]; 
return e;

}

  
int LocateElem_Sq (SqList &L, ElemType e)//在线性表L中检索值为e的第一个数据元素
{  
for (int i=1; i<=L.length; ++i)
if (L.elem[i]==e) return i;
  return FALSE;
}


bool ListInsert_Sq (SqList &L, int i, ElemType e)//在线性表L中下标为i的数据元素之前插入数据元素e  
{
 
if (i<1||i>L.length+1) 
{
cout<<"i值不合法"<<endl;//i值不合法
return FALSE;
}
if (L.length>=L.listsize) 
{
L.elem=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));//realloc的返回值请看说明2
if(!L.elem) {cout<<"OVERFLOW"<<endl; return FALSE;}//存储分配失败
L.listsize+=LISTINCREMENT;//增加存储容量
}

for (int j=L.length; j>=i; --j) 
L.elem[j+1] = L.elem[j];
  L.elem[i]=e; ++L.length; return TRUE;
}

  
ElemType ListDelete_Sq(SqList &L, int i, ElemType e)// 将线性表L中第i个数据元素删除
{
  if (ListEmpty_Sq(L)) return FALSE; 
if (i<1 || i>L.length) 
{
cout<<"i值不合法"<<endl;//i值不合法
return FALSE;
} 
e=L.elem[i]; 
  for (int j=i+1; j<=L.length; j++) 
L.elem[j-1]=L.elem[j];
  L.length--; return e;
}
//------------------算法2.1--------------------------------------
void union_Sq(SqList &La,SqList &Lb)
{
//说明
//算法的功能是将所有在线性表Lb中但不在La中的数据元素插入到La中
for(int i=1;i<=7;++i)
{
ElemType e=GetElem_Sq(Lb,i);
  if(!LocateElem_Sq(La,e)) ListInsert_Sq(La,La.length+1,e);
}
}

//-----------------算法2.2--------------------------------
void MergeList_Sq(SqList &La,SqList &Lb,SqList &Lc)
{
int i=1;
int j=1;
int k=0;
ElemType e1,e2;
while(i<=La.length && j<=Lb.length)//La和Lb均非空
{

e1=GetElem_Sq(La,i);e2=GetElem_Sq(Lb,j);
if(e1<e2) {ListInsert_Sq(Lc,++k,e1);++i;}
else {ListInsert_Sq(Lc,++k,e2);++j;}
}
while(i<=La.length)
{e1=GetElem_Sq(La,i++);ListInsert_Sq(Lc,++k,e1);}//注意i
while(j<=Lb.length)
{e2=GetElem_Sq(Lb,j++);ListInsert_Sq(Lc,++k,e2);}


}

//---------------------------主函数-------------------------------------
void main()
{
  SqList la,lb;
InitList_Sq(la);
InitList_Sq(lb);
  //线性表La中的元素为[3,5,8,11],线性表Lb中的元素为[2,6,8,9,11,15,20]
  ListInsert_Sq (la, 1, 3);ListInsert_Sq (la, 2, 5);ListInsert_Sq (la, 3, 8);ListInsert_Sq (la, 4, 11);
  ListInsert_Sq (lb, 1, 2);ListInsert_Sq (lb, 2, 6);ListInsert_Sq (lb, 3, 8);ListInsert_Sq (lb, 4, 9);ListInsert_Sq (lb, 5, 11);ListInsert_Sq(lb, 6, 15);ListInsert_Sq(lb,7,20);

//------------------算法2.1的测验--------------------------------------
 

//------------------算法2.2的测验-------------------------------------- 

}

数据结构(C语言)线性表的创建、插入、删除等操作 数据结构(C语言)线性表的创建、插入、删除等操作 #include&amp;amp;lt;stdio.h&amp;amp;gt; #include&amp;amp;lt;stdlib.h&amp;amp;gt; #define TRUE 1; #define FALSE 0; #define OK 1; #define ERROR 0; #define OVERFLOW -2; typedef int Status; typedef int ElemType 阅读详情

相关推荐

C语言,线性表建立、插入、删除、清空等

生成线性表,完成线性表的顺序表示和实现,实现线性表的创建、插入、删除和查找、清空、释放等操作

链式线性表(链表)的创建(尾插法)---CreatListTail

链式线性表(链表)的创建(尾插法)---CreatListTail

m0_62541343的博客 734

链式线性表的建立、插入及删除

1. 可扩展:可中间、尾部新增记录; 2. 可删除数据:可删除指定学号的数据; 3. 可统计:可统计链表中的记录数量、平均成绩、最低、最高成绩(每次增减数据后,统计一次) 4. 可查询:可查询某个学号对应的相关姓名、成绩;

c语言实现简易线性表

c语言实现简易线性表。

qq_63605696的博客 3373

线性表创建,插入,删除及合并源代码

c语言实现线性表创建,插入,删除及合并的源代码。

UE4游戏逆向实战:从HOOK明文包到自定义发包的完整流程(附加密算法解析)

本文详细解析了UE4游戏网络通信的逆向工程完整流程。从定位线程发包点、HOOK拦截明文封包,到逆向分析加密解密算法,最终实现自定义组包与加密发送。文章结合实战案例,为游戏安全研究和技术人员提供了一套清晰、可操作的方法论。

weixin_29009081的博客 1236

线性表之链表的创建以及基本操作

在线性表中,使用最多的莫过于链表了,链表有多个种类,而且使用方便,接下来我们来慢慢了解链表的创建以及基本操作;

m0_64028711的博客 998

避坑指南:vue-print-nb打印隐藏元素与空白页的那些事儿

本文深入解析了使用vue-print-nb插件时,打印出现空白页及隐藏元素问题的根本原因与解决方案。核心在于理解浏览器打印原理,并通过CSS媒体查询精准控制样式。文章提供了从重置根元素高度、处理隐藏元素到控制分页的完整避坑指南,帮助开发者彻底解决打印样式难题。

weixin_29008691的博客 437

C语言实现线性表的基本操作详解

··· #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100//线性表的最大长度 typedef struct { int *elem; int length;//线性表的当前长度 //int maxlength;//线性表的最大长度 }SqList; SqList q; int i,k; //初始化函数 void initSqList(SqList& l) { ...

qq_62138543的博客 3008

【codex教程】Codex 注册和使用教程(2026最新版)

Codex 是 OpenAI 推出的 AI 编程助手,可以帮助开发者阅读代码、修改代码、运行命令、生成测试、排查 bug、做代码审查,也可以在终端、IDE、Codex App 或网页端使用。根据 OpenAI 帮助中心,截至 2026 年 6 月,Codex 已包含在 Free、Go、Plus、Pro、Business、Edu 和 Enterprise 等 ChatGPT 方案中,但不同套餐的使用额度会有所不同。适合开发者在终端中使用。如果你想在命令行里使用 Codex,可以安装 Codex CLI。

与时俱进,开放共享 2万+

ESP32-CAM实战:从零构建高精度QR二维码识别系统

本文详细介绍了如何使用ESP32-CAM构建高精度QR二维码识别系统,涵盖硬件配置、开发环境搭建、二维码识别库选择与优化、完整系统实现及实战问题排查。通过优化识别算法和电源管理,系统可实现快速、稳定的二维码识别,适用于物联网设备绑定等场景。

weixin_42524703的博客 433

软件设计师考试&nbsp;考试大纲&nbsp;一

一、考试说明分析   软件设计师考试的总体要求   软件设计师主要完成三项工作:(1)编写文档;(2)组织指导程序员开展工作;(3)软件优化和集成测试,开发高质量软件。本工作要求具有工程师的实际工作能力和业务水平。 具体讲就是,通过本考试的合格人员,能根据软件开发项目管理和软件工程的要求,按照系统总体设计规格说明书进行软件设计,编写程序设计规格说明书等相应的文档,组织和指导程序员编写、调试程序

dongzi502的专栏 472

百条网络工程师基础面试题(不断更新)

1)什么是链接? 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2)OSI 参考模型的层次是什么? 有 7 个 OSI 层:物理层,数据链路层,网络层,传输层,会话层,表示层和应用层。 3)什么是骨干网? 骨干网络是集中的基础设施,旨在将不同的路由和数据分发到各种网络。它还处理带宽管理和各种通道。 4)什么是 LAN? LAN 是局域网的缩写。它是指计算机与位于小物理位置的其他网络设备之间的连接。 5)什么是节点? 节点是指连接发生的点。它可以是作为网络一部分的计算机

weixin_42728126的博客 2万+

2.4链表(链式存储结构)及创建

前面详细地介绍了顺序表,本节给大家介绍另外一种线性存储结构——链表。 链表,别名链式存储结构或单链表,用于存储逻辑关系为 "一对一" 的数据。与顺序表不同,链表不限制数据的物理存储状态,换句话说,使用链表存储的数据元素,其物理存储位置是随机的。 例如,使用链表存储 {1,2,3},数据的物理存储状态如图 1 所示: 图 1 链表随机存储数据 我们看到,图 1 根本无法体现出各数据之间的逻辑...

weixin_42437172的博客 692

CMake安装grpc生成gRPCTargets.cmake文件

以下是安装语句: cd grpc_folder git submodule update --init cmake .. make -j 4 sudo make install 然而编写依赖gRPC的程序,发现无法调用gRPC的CMake文件,错误提示如下所示: include could not find load file: /usr/local/lib/cmake/g...

2329

基于STM32L4XX、HAL库的MAX13487EESA RS485总线收发器驱动程序设计

MAX13487EESA是一款3.3V供电的RS-485/RS-422收发器,由Maxim Integrated生产。PA4 (控制引脚) ---> /RE, DE (连接在一起)具有±15kV ESD保护的驱动器输出和接收器输入。半双工RS-485/RS-422通信。工业温度范围:-40°C至+85°C。工作电压范围:3.0V至3.6V。数据速率高达250kbps。

zhusl6688的博客 687

C语言创建线性表

动态分配而非数组的线性表 在VS2019中创建的,结构体里定义了默认的构造函数(不清楚这算不算C++的语法),线性表的长度是动态分配的。 Incream_List 线性表扩容函数 ListInsert 插入数据函数 ListInit 初始化时输入一批数据 ListDelete 删除某个位置的数据 ListSearch 查找某数据在什么位置 ListOutput 输出全部数据 这是头文件...

Aruko的博客 7345

【2026 Science Robotics】Learning realistic lip motions for humanoid face robots

哥伦比亚大学Yuhang Hu团队提出了一种创新方法,通过10自由度软体嘴唇设计和自监督学习算法解决仿人机器人嘴唇动作僵硬问题。研究采用变分自编码器(VAE)和面部动作Transformer(FAT)模型,将语音信号转化为机器人可执行的电机指令。实验表明,该方法在多语言测试中表现优异,用户偏好率达62.5%,显著提升了口型同步的真实感和流畅度。该成果突破了传统机械结构的限制,为跨越"恐怖谷效应"提供了有效解决方案。

志在山顶的人,不会贪念山腰的风景 308

c语言线性表创建步骤,实例详解C语言线性表的顺序与实现步骤

数据结构中,线性表是一种入门级的数据结构,线性表分为序列表和链表,在下文中爱站技术频道小编将实例详解C语言线性表的顺序与实现步骤,下面一起跟着爱站技术频道的步伐来学习吧!1.概述通常来说顺序表是在计算机的内存中以数组的形式保存的线性表,是用一组地址连续的存储单元依次存储数据元素的线性数据结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单...

weixin_42322512的博客 3321

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

线性表的创建C语言,线性表的创建(C)

main.c#define _CRT_SECURE_NO_WARNINGS#include "header.h"#include "SqList.h"void main(void) {SqList LA; //建立线性表InitList_Sq(&LA);//初始化线性表。。。。。。。。。。。。。。。。。//添加自己的程序代码while (1);}header.h#include #inc...

weixin_31006689的博客 1147

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

线性表的链式结构创建与实现(一)

个人理解,仅供参考 创建链表的步骤: 1:创建头指针 2:将头指针指向空,防止野指针 3:将新的指针移动到头指针(我习惯认为是将头指针赋值给它) 4:建立新结点 5:让新指正指向空,防止野指针 6:给新指针赋值 7:让尾指针指向当前指针,实现链表的连接(我习惯认为是让上一指针指向它) 8:将尾指针移向当前指针(我习惯认为将当前指针赋值给它) ***每次创建新指针的时候都要将指针

ACM77的博客 1756

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

链式线性表的基本操作

#include&lt;stdio.h&gt; #include&lt;malloc.h&gt; #define ERROR 0 #define OK 1 #define ElemType int typedef struct LNode { int data; struct LNode *next; }LNode,*LinkList; int CreateLink_L(LinkList ...

qq_36285002的博客 1851

链表

/* 2.链式线性表的建立、插入及删除。*/ #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;malloc.h&gt; #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int ElemType; typedef struc...

AWA124的博客 634

单链表的创建--从零开始

上学期临近期末的时候用Word写了一篇链表详解,今天突然想到自己一直在搞算法题,很长时间没有用链表了。试着在纸上写了几步,发现回想起来竟然有些吃力,这里把上学期写的链表详解贴上来mark一下,顺便以此作为数据结构笔记的第一篇。 学习链表需要了解的基本知识点: 首先,想要熟练使用链表,就要知道两大类基本知识点: 1. 指针 2.结构体 (如果对两个知识点有疑惑请百度一下,没有什么问题是百...

cprimesplus的博客 9万+

j2ee三大框架个人理解

Hibernate工作原理及为什么要用?  原理:  1.读取并解析配置文件  2.读取并解析映射信息,创建SessionFactory  3.打开Sesssion  4.创建事务Transation  5.持久化操作  6.提交事务  7.关闭Session  8.关闭SesstionFactory 为什么要用:  1.    对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性

JarryLiu 的专栏 1万+
上一篇: SQl查询行转列
下一篇: java小数和百分数互转
jarry.liu
博客等级 码龄16年 36粉丝 304原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jarry.liu

如果对您有帮助,鼓励下博主吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值