线性表的顺序表示和实现 (创建,插入,删除,查找)数据结构 严蔚敏(C语言版)代码实现

简介: 线性表的顺序表示和实现 (创建,插入,删除,查找)数据结构 严蔚敏(C语言版)代码实现

实现工具:dev

顺序表功能:

创建一个空的线性表;

在线性表中插入元素;

在线性表中删除元素;

在线性表中查找元素;

代码:(详解请看注释)

#include<stdio.h>
#include<stdlib.h>//动态分配需要的头文件
#define LIST_INIT_SIZE 100
#define LISTNCREAMENT 10
#define OK 1
#define FALSE 0
#define OVERFLOW 2//溢出 
typedef float ElemType;
typedef int Status;
//线性表动态分配内存的顺序存储结构 
typedef struct
{
  ElemType *elem;//存储的基地址 
  int length;//当前长度 
  int listsize;//当前分配的最大容量 
}SqList;
ElemType * p,* q,e;//注意,e要定义为全局变量 
ElemType * newbase;//若存储不够的话,新分配的基地址 
//创建线性表 (空表) 
Status InitList_Sq(SqList &L)
{
  L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));//为顺序表分配一片连续的存储空间 
  L.length=0;//初始化当前长度 
  L.listsize=LIST_INIT_SIZE;//初始化当前最大容量 
  return OK; 
}
//线性表的插入
Status ListInsert_Sq(SqList &L,int i,ElemType e)
{
  if(i<1||i>L.length+1)//注意长度+1 
  {
    return FALSE;
  }
  if(L.length>L.listsize)//若长度超过了当前最大容量,则需要新开辟空间 
  {
    //realloc的使用 
    newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTNCREAMENT)*sizeof(ElemType));
    if(!newbase)//判断新空间是否开辟 
    {
      exit(OVERFLOW);
    }
    L.elem=newbase;//将结构体中的数据更新 
    L.listsize+=LISTNCREAMENT;
  }
  q=&(L.elem[i-1]);//p指向的是第i个元素 
  for(p=&L.elem[L.length-1];p>=q;--p)
  //插入时,需要从最后一个元素开始往后挪
  //p指向的是数据中的最后一个元素,其中第i个元素也要进行挪位 
  {
    *(p+1)=*p; 
  }
  *q=e;//将插入的元素e插入进去 
  ++L.length;//顺序表的长度加一  
  return OK;
 } 
//删除操作
ElemType ListDelete_Sq(SqList &L,int i, ElemType &e)
{
  if(i<1||i>L.length)//注意边界 
  {
    return FALSE;
  }
  p=&L.elem[i-1];//p是要删除的第i个元素 
  e=*p;//将删除的元素赋值给e 
  q=L.elem+L.length-1;//表尾元素的位置 
  for(++p;p<=q;++p)//将元素往前移动 
  {
    *(p-1)=*p;
  }
  --L.length;//长度减一 
  return e; 
 } 
//查找
int LocateElem_Sq(SqList L,ElemType e)
{
  int i;
  i=1;
  while(i<=L.length&&L.elem[i-1]!=e)
  {
    ++i;
  }
  if(i<L.length)
  {
    return i;
  }
  else return FALSE;
 } 
int main()
{
  Status i,j;
  SqList La;
  //创建空表 
  InitList_Sq(La);
  //将表赋值为1 2 3 4 5 
  for(i=1;i<=5;i++)
  {
    ListInsert_Sq(La,i,i);
  }
  //输出顺序表 
  for(i=0;i<5;i++)
  {
    printf("%f ",La.elem[i]);
  }
  printf("\n");
  //在顺序表的第二个位置插入11 
  ListInsert_Sq(La,2,11);
  //输出新表 
  for(i=0;i<La.length;i++)
  {
    printf("%f ",La.elem[i]);
  }
  printf("\n");
  //删除顺序表的第4个元素 
  ListDelete_Sq(La,4,e);
  for(i=0;i<La.length;i++)
  {
    printf("%f ",La.elem[i]);
  }
  printf("\n");
  //查找顺序表中元素11,并返回其位置 
  j=LocateElem_Sq(La,11);
  printf("%d ",j);
  return 0;
}

image.png

相关文章
|
26天前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
38 1
|
1月前
|
存储 安全 数据管理
C语言之考勤模拟系统平台(千行代码)
C语言之考勤模拟系统平台(千行代码)
55 4
|
1月前
|
存储 算法 搜索推荐
【趣学C语言和数据结构100例】91-95
本文涵盖多个经典算法问题的C语言实现,包括堆排序、归并排序、从长整型变量中提取偶数位数、工人信息排序及无向图是否为树的判断。通过这些问题,读者可以深入了解排序算法、数据处理方法和图论基础知识,提升编程能力和算法理解。
46 4
|
1月前
|
存储 机器学习/深度学习 搜索推荐
【趣学C语言和数据结构100例】86-90
本文介绍并用C语言实现了五种经典排序算法:直接插入排序、折半插入排序、冒泡排序、快速排序和简单选择排序。每种算法都有其特点和适用场景,如直接插入排序适合小规模或基本有序的数据,快速排序则适用于大规模数据集,具有较高的效率。通过学习这些算法,读者可以加深对数据结构和算法设计的理解,提升解决实际问题的能力。
43 4
|
1月前
|
存储 算法 数据处理
【趣学C语言和数据结构100例】81-85
本文介绍了五个经典算法问题及其C语言实现,涵盖图论与树结构的基础知识。包括使用BFS求解单源最短路径、统计有向图中入度或出度为0的点数、统计无向无权图各顶点的度、折半查找及二叉排序树的查找。这些算法不仅理论意义重大,且在实际应用中极为广泛,有助于提升编程能力和数据结构理解。
41 4
|
1月前
|
算法 数据可视化 数据建模
【趣学C语言和数据结构100例】76-80
本文介绍了五种图论算法的C语言实现,涵盖二叉树的层次遍历及广度优先搜索(BFS)和深度优先搜索(DFS)的邻接表与邻接矩阵实现。层次遍历使用队列按层访问二叉树节点;BFS利用队列从源节点逐层遍历图节点,适用于最短路径等问题;DFS通过递归或栈深入图的分支,适合拓扑排序等场景。这些算法是数据结构和算法学习的基础,对提升编程能力和解决实际问题至关重要。
51 4
|
1月前
|
存储 算法 vr&ar
【趣学C语言和数据结构100例】71-75
本文介绍了五个C语言数据结构问题及其实现,涵盖链表与二叉树操作,包括按奇偶分解链表、交换二叉树左右子树、查找节点的双亲节点、计算二叉树深度及求最大关键值。通过递归和遍历等方法,解决了理论与实际应用中的常见问题,有助于提升编程能力和数据结构理解。
39 4
|
25天前
|
存储 算法 程序员
C 语言递归算法:以简洁代码驾驭复杂逻辑
C语言递归算法简介:通过简洁的代码实现复杂的逻辑处理,递归函数自我调用解决分层问题,高效而优雅。适用于树形结构遍历、数学计算等领域。
|
27天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
53 5
|
1月前
|
存储 安全 物联网
C语言物联网开发之设备安全与代码可靠性隐患
物联网设备的C语言代码安全与可靠性至关重要。一是防范代码安全漏洞,包括缓冲区溢出和代码注入风险,通过使用安全函数和严格输入验证来预防。二是提高代码跨平台兼容性,利用`stdint.h`定义统一的数据类型,并通过硬件接口抽象与适配减少平台间的差异,确保程序稳定运行。

热门文章

最新文章