线性表的顺序表示(C语言实现)

LocateElem()&ListTraverse;()实例说明 LocateElem(L,e,compare())&ListTraverse;(L,visit())实例说明 立即下载

#include<stdio.h>
#include<malloc.h>

#define ERROR 0
#define OK 1
#define EQUAL 1
#define OVERFLOW -1
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10

struct STU{
  char name[20];
  char stuno[10];
  int age;
  int score;
}stu[50];
typedef struct STU ElemType;

 

struct LIST
{
  ElemType *elem;
  int Length;
  int listsize;
};

typedef struct LIST List;

 

/*构造一个空的线性表L*/

int init(List *L)
{
  L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
  if(!L->elem) exit(OVERFLOW);
  L->Length=0;
  L->listsize=LIST_INIT_SIZE;
  return OK;
}/*init */

 

/*返回L中数据元素的个数*/

int ListLength(List *L)
{
  return L->Length;
}

 

/*若线性表L存在,1<=i<=L.Length,用e返回L中第i个元素*/
void GetElem(List L,int i,ElemType *e)
{
  *e=L.elem[i];
}

int EqualList(ElemType *e1,ElemType *e2)
{
  if (strcmp(e1->name,e2->name)==0)
    return 1;
  else
    return 0;
}

 

/*判断元素的大小,通过元素的name字段*/

int Less_EqualList(ElemType *e1,ElemType *e2)
{
  if (strcmp(e1->name,e2->name)<=0)
    return 1;
  else
    return 0;
}

 

/*若cur_e是L的元素,且不是第一个,则用pre_e返回它的前驱*/

int PriorElem(List *La,ElemType cur_e,ElemType *pre_e)
{
  int i;            
  i=LocateElem(La,cur_e,EQUAL);
  {
     if (i>=1)
     {
       *pre_e=La->elem[i-1];  /*»òдΪLa->elem[i-1]*/
       return OK;
     } 
     else
     {
       return ERROR;
     }
  }
}

 

/*若cur_e是L的元素,且不是最后一个,则用next_e返回它的后继元素*/

int NextElem(List *La,ElemType cur_e,ElemType *next_e)
{
  int i;         
  if (LocateElem(La,cur_e,i))
  {
     if (i<=La->Length-1)
     {
       *next_e=(*La).elem[i+1];
       return OK;
     } 
     else
     {
       return ERROR;
     }
  }
}

 

/*返回线性表L中第一个与e满足关系type的位序*/

int LocateElem(List *La,ElemType e,int type)
{
  int i;
  switch (type)
    {
      case EQUAL:
 for(i=0;i<La->Length;i++)
   if(EqualList(&La->elem[i],&e))
     return i;
 break;
      default:
 break;
    }
  return 0;
}

 

/*从线性表L中删除第i个元素,并且删除的元素赋给e*/

int DeleteElem(List *L,int i,ElemType e)
{
  ElemType *p,*q; 
  if ((i<1) || (i>L->Length)) return ERROR;
  p=&L->elem[i-1];
  e=*p;
  q=L->elem+L->Length-1;  /* Also Write: q=&L->elem[0]+L->Length-1;*/
  for (++p;p<=q;++p)
    *(p-1)=*p;
  --L->Length;
  return OK; 
}

 

/*清空线性表L*/

void ClearList(List *L)
{
     L->Length=0;
}

 

/*销毁线性表L*/

int DestroyList(List *L)
{
    int i;
    for (i=0;i<=L->Length-1;i++)
      free(&L->elem[i]);
    L->Length=0;
}   

 

/*合并线性表La,Lb到Lc*/

void MergeList(List *La,List *Lb,List *Lc)
{
  ElemType *pa,*pb,*pc,*pa_last,*pb_last;
  pa=La->elem;pb=Lb->elem;
  Lc->listsize = Lc->Length = La->Length + Lb->Length;
  pc = Lc->elem = (ElemType *)malloc(Lc->listsize * sizeof(ElemType));
  if(!Lc->elem)   exit(OVERFLOW);
  pa_last = La->elem + La->Length - 1;
  pb_last = Lb->elem + Lb->Length - 1;
  while(pa<=pa_last && pb<=pb_last)
    {
      if(Less_EqualList(pa,pb))   *pc++=*pa++;
      else *pc++=*pb++;
    }
  while(pa<=pa_last) *pc++=*pa++;
  while(pb<=pb_last) *pc++=*pb++;
}

 

/*将所有在线性表Lb中但不早La中的数据元素插入到La中*/

void UnionList(List *La, List *Lb)
{
  int La_len,Lb_len;
  int i;
  ElemType e;

  La_len=ListLength(La);  Lb_len=ListLength(Lb);
  for(i=0;i<Lb_len;i++)
    {
      GetElem(*Lb,i,&e);
      if(!LocateElem(La,e,EQUAL))
 ListInsert(La,++La_len,e);
    }

}

 

/*打印线性表L*/

int printlist(List L)
{
  int i;
  printf("name       stuno        age     score/n");
  for(i=0;i<L.Length;i++)
      printf("%-10s %s/t%d/t%d/n",  L.elem[i].name,  L.elem[i].stuno,
   L.elem[i].age,  L.elem[i].score);
  printf("/n");
}

 

/*将元素e插入线性表L的第i个元素中*/

int ListInsert(List *L,int i,struct STU e)
{
  struct STU *p,*q;
  if (i<1||i>L->Length+1) return ERROR;
  q=&(L->elem[i-1]);
  for(p=&L->elem[L->Length-1];p>=q;--p)
    *(p+1)=*p;
  *q=e;
  ++L->Length;
  return OK;
}/*ListInsert Before i */


main()
{
  struct STU e,t,*k;
  List La,Lb,Lc,*L;
  int i;

  printf("/n/n-------------------List Demo is running...----------------/n/n");
  printf("First is InsertList function./n");
  init(&La);

  strcpy(e.name,"stu1");
  strcpy(e.stuno,"100001");
  e.age=80;
  e.score=1000;
  ListInsert(&La,1,e);
  strcpy(e.name,"stu3");
  strcpy(e.stuno,"100002");
  e.age=80;
  e.score=1000;
  ListInsert(&La,2,e);

  printlist(La);
  printf("List A length now is  %d./n/n",La.Length);
  getch();

  strcpy(e.name,"stu5");
  strcpy(e.stuno,"100003");
  e.age=80;
  e.score=1000;
  ListInsert(&La,3,e);

  printlist(La);
  printf("List A length now is  %d./n/n",La.Length);
  getch();

  strcpy(t.name,"stu5");
  strcpy(t.stuno,"100003");
  t.age=80;
  t.score=1000;
  L=&La;
  i=LocateElem(L,t,EQUAL);
  printf("The position of t is %d/n",i);
 
  PriorElem(L,t,k);
  printf("The prior name is %s/n",k->stuno);
  getch();
 
  DeleteElem(&La,2,e);
  printlist(La);
  getch();
 
  DestroyList(&La);
  printlist(La);
  getch();
  init(&Lb);
  strcpy(e.name,"stu2");
  strcpy(e.stuno,"100001");
  e.age=80;
  e.score=1000;
  ListInsert(&Lb,1,e);
  strcpy(e.name,"stu4");
  strcpy(e.stuno,"100002");
  e.age=80;
  e.score=1000;
  ListInsert(&Lb,2,e);

  strcpy(e.name,"stu6");
  strcpy(e.stuno,"100001");
  e.age=80;
  e.score=1000;
  ListInsert(&Lb,3,e);

  printlist(Lb);
  printf("List B length now is  %d./n/n",Lb.Length);
  getch();

  MergeList(&La,&Lb,&Lc);
  printlist(Lc);
  getch();

  printf("Second is UnionList function./n");
  printf("Now union List A and List B...../n");
  UnionList(&La,&Lb);
  printlist(La);
  printf("List A length now is  %d./n/n",La.Length);
  getch();
  printf("/n/n/n/n/n/nWelcome to visit http://zmofun.heha.net !/n/n/n/n/n/n/n");
  getch();
}

【Unity报错】Unity导入海康SDK 报错 DllNotFoundException: PlayCtrl assembly 2.尝试按网上其他的办法(包括使用depengs查看dll依赖等)1.先检查Plugins文件夹中是否存在PlayCtrl文件。3.如果网上查阅的办法都不能解决,请继续往下看。更换低版本的SDK库文件。 阅读详情

相关推荐

HC-SR04测距不准?STM32F103定时器捕获模式详解与精度提升实战

本文详细解析了HC-SR04超声波测距模块在STM32F103上的精度问题,并提供了定时器输入捕获模式的实战配置方法。通过硬件级时间测量和温度补偿算法,将测距精度提升至±0.1cm,适用于工业级应用场景。文章包含完整的代码实现和测试对比数据,帮助开发者解决超声波测距不准的常见问题。

weixin_30313409的博客 351

[数据结构]线性表(一)

主要内容: 1.线性表的类型定义 2.线性表的顺序表示和实现 3.线性表的链式表示和实现 学习提要: 1.了解线性表的逻辑结构和物理结构 2.掌握两种存储结构的描述方法以及在每种存储结构上的基本操作的实现 3.理解两种存储结构的特点及其使用场合 重难点内容: 顺序表、链表及其操作实现

三月,有人呼唤你的名字 1668

YOLOv8 + TensorRT 实战:手把手教你用 C++ 实现实时视频流目标检测(附完整项目代码)

本文详细介绍了如何将YOLOv8与TensorRT结合,通过C++实现实时视频流目标检测的全流程。从环境配置、模型转换优化到视频处理架构设计,手把手教你构建高性能检测系统,并附完整项目代码。特别针对Windows平台下的TensorRT模型加速部署提供了实用技巧和性能优化方案。

weixin_29051193的博客 347

数据结构

    第三章:线性表 1.线性表:零个或多个数据元素的有限序列 线性线性表的几种操作: InitList(*L); //初始化建立一个空的线性链表L ListEmpty(L);//若为空返回为true,否则返回false ClearList(*L); //将线性列表L清空 Getelem(L,i,*e); //将线性链表L的第i个元素之返回给e LocateEmle(L,e); //在...

yzy970611的博客 369

WKWebView 白屏问题,WKWebView request body丢失问题

1,WKWebView 白屏问题 WKWebView 自诩拥有更快的加载速度,更低的内存占用,但实际上 WKWebView 是一个多进程组件,Network Loading 以及 UI Rendering 在其它进程中执行。初次适配 WKWebView 的时候,我们也惊讶于打开 WKWebView 后,App 进程内存消耗反而大幅下降,但是仔细观察会发现,Other Process 的内存占用会...

weixin_37543822的博客 737

ArcGIS中根据DEM和地形起伏度进行地貌分类划分

大家好我是GIS蒲公英,数字高程模型(digital elevation model, DEM)经常都被用到专题地图的底图中,下面来我们来交流一下仅选择海拔和地形起伏度两个指标,用DEM来进行地貌类型的自动判别划分

GIS蒲公英的博客 3万+

《大话数据结构》-3-一文学会数据结构中的线性表+顺序存储结构(概念,实例,代码)

《大话数据结构》-3-一文学会数据结构中的线性表+顺序存储结构(概念,实例,代码)

weixin_45594172的博客 990

【Docker安装】OpenEuler系统下部署Docker环境

【Docker安装】OpenEuler系统下部署Docker环境

jks212454的博客 4191

线性表应用一

例2-1 已知集合 A 和 B,求两个集合的并集,使 A=A∪B,且 B 不再单独存在。  从集合的观点看,此问题求解的方法很简单,只要对集合 B 中的所有元素一个一个地检查,看看在集合 A 中是否存在相同元素,若不存在,则将该元素插入到集合 A,否则舍弃之。  要在计算机中求解,首先要确定"如何表示集合"。集合可以有多种表示方法,对上述集合求并的问题可以用线性表表示集合。  现假设以线性表

艺术魅影 892

华为OD机试 - 机器人活动区域(Python/JS/C/C++ 双机位C卷 200分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。现有一个机器人,可放置于 M × N的网格中任意位置,每个网格包含一个非负整数编号。当相邻网格的数字编号差值的绝对值小于等于 1 时,机器人可在网格间移动问题:求机器人可活动的最大范围对应的网格点数目。说明:1)网格左上角坐标为 (0, 0),右

学Java,找哪吒 1434

通过轻量级图像增强Transformer (IAT) 提升YOLOv8在低光环境下的检测性能

随着深度学习和计算机视觉的快速发展,目标检测模型在各个领域中的应用不断扩展,特别是在低照度环境下的视觉任务。YOLOv8作为当前最先进的目标检测模型之一,在高亮度和良好照明条件下表现出色,但在低照度环境下的性能存在一定的不足。为了解决这一问题,我们提出了一种轻量级的低照度图像增强网络(IAT)来改进YOLOv8的暗光检测能力。本篇文章将深入探讨这一创新改进,并附带代码实现,帮助大家更好地理解这一技术的应用和效果。

博客 1214

将俩个线性表合在一起

俩个线性表合在一起组成新的线性表C,C = AUB,void union(List &amp;La, List Lb){ int len_La = ListLength(La); int len_Lb = ListLength(Lb); for(int i = 0; i &lt; Len_Lb; i++) { GetElem(Lb, i, e);   //用e返回L中第i个数据元素的值 if(...

就是这个七昂的博客 954

uniapp中使用canvas生成海报,并下载保存到手机相册

如下图,是在H5中,canvas生成后的效果,首先说明,H5不支持返回图片的临时路径,不能用于保存,APP端生成成功后,会返回图片的临时路径用来保存到相册。本地测试,用的网络图片,没有出现跨域的问题,APP端也正常显示。 完整代码:可以将整个代码复制到你得uniapp项目中直接运行。代码中做了详细的注册,关于API的用法,这里只标注的简单的提示,具体还是参考 官方链接uniapp-canvas吧 <template> <view class="demo"> <c.

sunluyi的博客 3万+

线性表顺序表示和实现(C语言)

线性表顺序表示和实现 线性表是最常用且最简单的一种数据结构。简而言之,一个线性表是n个数据元素的有限序列 线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素。 实现工具:dev 顺序表示要实现的功能: 1.构造一个空的线性表 2. 对线性表进行赋值 3. 对线性表进行销毁 4. 对线性表进行重置 5. 判断线性表是否为空 6. 获取线性表的长度 7. 获取线性表某一位置对应的元素 8. 在线性表某一位置插入元素 9. 删除线性表某一位置的元素 10. 求线性表某一元素的前驱 11. 求线

世纪末的架构师的博客 5万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

线性表 顺序 c语言,线性表的顺序表示和实现(C语言)

最近开始准备软件设计师考试,所以把数据结构的知识梳理一遍。首先线性表的顺序表示。//list.c#include#include#define ERROR -1#define OVERFLOW 2#define TRUE 1#define FALSE 0#define OK 1#define LIST_INIT_SIZE 100#define LIST_INCREMENT 10t...

weixin_35510630的博客 368

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

数据结构 用c语言实现 线性表的顺序表示

大家好,今天跟大家分享一下 线性表用顺序表示实现的几种功能: 1.InitList_Sq()初始化线性表 2.LocateElem()查找 3.InsertElem()插入 4.DeleteElem()删除 注:Status 和 ElemType 是用typedef函数定义的 int型变量别名 1.InitList_Sq() 此段函数作用:初始化线性表,并使用动态内存分配函数 malloc 为线性...

qq_45330008的博客 943

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

[数据结构] [C语言] 线性表的顺序表示和实现

线性结构 线性结构的特点是:在数据元素的非空有限集中,(1)存在唯一一个被称作“第一个”的数据元素;(2)存在唯一一个被称作“最后一个”的数据元素;(3)除第一个之外,集合中的每个元素均只有一个前驱;(4)除最后一个之外,集合中每个数据元素均只有一个后继。 线性表 线性表是最常用且最简单的一种数据结构。一个线性表是n个数据元素的有限序列。线性表中元素的个数n(n≥0)定义为线性表的长度,n=0时称...

__Zhou__的博客 734

线性表顺序表示-C语言实现

线性表是最常用且最简单的一种数据结构。简而言之,一个线性表是 n 个数据元素的有限序列。 线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素。线性表顺序表示 数据结构有3个字段:存储数据、存储数量、存储容量。这里的存储数据 存的是线性表总数据的集合 初始化 给 seqList 初始分配存储空间、存储数量与存储容量 扩容 这里介绍的是动态的顺序表,存储达到容量上限就扩容存储。静态的没有扩容操作,容量达到上限就不允许再存储数据了 顺序表插入数据元素 插入分三种情况,头插入(pos = 0)、

green_water995400524的博客 502

C语言实现线性表的顺序表示

C语言实现线性表的顺序表示 图解顺序表的插入与删除

qq_43629857的博客 7125

数据结构C语言版-严蔚敏 笔记及课本代码(1)线性表的顺序表示和实现

考研复习数据结构 从今天开始不定时更新关于《数据结构C语言版-严蔚敏》这本书中代码的C语言实现,有错的地方可以发出来hhh 谢谢大家!! 线性表的顺序表示和实现 本篇博客先放上线性表的: 构建:InitList_Sq(&L) 插入:ListInsert_Sq(SqList &L, int i, int e) 删除指定位置元素:Delete_SqList(SqList &L,int i,int &e) 其他的实现代码晚点发上来!! #include<stdio.h>

SuperYong的博客 720

线性表顺序表示原理与C语言实现详解

线性表是数据结构中最基础的组织形式,通过连续内存空间实现元素的顺序存储。顺序表作为线性表的主要实现方式,其核心原理是利用数组的随机访问特性,在O(1)时间复杂度内完成元素访问。这种结构在内存局部性和缓存命中率方面具有显著优势,特别适合数据规模稳定、需要频繁随机访问的场景。从工程实践角度看,顺序表通过动态数组实现,支持扩容缩容等操作,在C语言中通常使用结构体封装基地址、长度和容量信息。典型应用包括数据采集缓冲、图像处理矩阵等需要高效内存访问的领域,与链表相比在空间利用率和访问效率上更具优势。

weixin_33423874的博客 304

简单的线性表的顺序表示实现,以及线性表的链式表示和实现、带头节点的单向链表,C语言简单实现一些基本功能

线性表是n个数据元素的有限序列,同一线性表中的元素必定具有相同特性,相阾的数据元素之间存在着序偶关系。线性表中元素的个数n(n>=0)定义为线性表的长度,0==n时称为空表,在非空表中每个数据元素都有一个确定的位置(下标)。线性表是一个相当灵活的数据结构,它的长度可根据需要增长或缩短。......

Hidin的博客 431

线性表的顺序表示与实现(C语言版)

线性表的顺序表示与实现(C语言版) 本例为纯C语言实现, 无C++部分 ​ // 本例为纯C语言实现,所用编译器为C编译器,非C++编译器 // 线性表的顺序表示与实现 #include<stdio.h> #include<stdlib.h> #define LIST_INIT_SIZE 100 //线性表存储空间初始分配量 #define LIST_IN...

Ninewind 1120

C语言实现顺序线性表的表示、插入、删除

在线性表中,数据元素在逻辑上具有一对一的关系,线性表的顺序表示是指用一组地址连续的存储单元依次存储线性表的数据元素。我们可以这样理解,线性表的顺序存储结构其实是用计算机内“物理位置相邻”来表示线性表中数据元素之间的逻辑关系。因为内存地址是连续的,我们恰好可以通过这种特点来表示线性表,这样顺序线性表的特点是:数据元素不仅逻辑上相邻,在物理地址上也是相邻的。同样我们只要知道了存储顺序线性表的基地址,就

LHS的专栏 1万+

线性表顺序表表示与实现(c语言)

#include<stdio.h> #include<stdlib.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INIT_SIZE 10 //初始化表长 #define INCREAMENT_SIZE 5 //分配增量 typedef int Stat...

weixin_43293451的博客 1036

[C语言]线性表的顺序表示和实现

参考严蔚敏/吴伟民版《数据结构-C语言版》 线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素。 线性表的动态分配顺序存储结构 #define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量 #define LISTINCREMENT 10 // 线性表存储空间的分配增量 // 当因为插入新元素而存储空间不足时,为鼠标增加一个大小为LIST...

f1ybee的专栏 2515
上一篇: Dev C++ 4.9.9.4调试的问题
下一篇: 线性链表(C语言实现)
djcsch2001
博客等级 码龄23年 16粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值