文章目录

  • 前言
  • 一、线行表的顺序存储结构
  • 二、代码
  • 三、运行结果

前言

最近在学数据结构,想在这里记录一下,也方便以后查找

一、线行表的顺序存储结构

线性表分为两种存储结构,顺序存储与链式存储。
顺序存储就是用一维数组来实现的。一维数组的下标与元素在线性表中的序号对应。

二、代码

1.引用头文件与宏定义:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>#define OK   1
#define ERROR  0
#define TRUE 1
#define FALSE 0#define  MAXSIZE  100
typedef int ElemType;

2.对线性表的定义:

typedef  struct
{ElemType  elem[MAXSIZE];  /*线性表占用的数组空间*/int       last;    /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/
}SeqList;

3.读取第i个位置上的值:

int GetElem(SeqList L, int i, ElemType *e)
{if (i<1 || i>L.last)return ERROR;*e = L.elem[i - 1];return OK;
}

4.元素e的位置:

int  Locate(SeqList L, ElemType e)
{int i = 0;        /*i为扫描计数器,初值为0,即从第一个元素开始比较*/while ((i <= L.last) && (L.elem[i] != e))        /*顺序扫描表,直到找到值为key的元素, 或扫描到表尾而没找到*/i++;if (i <= L.last)return(i + 1);  /*若找到值为e的元素,则返回其序号*/elsereturn(-1);  /*若没找到,则返回空序号*/
}

5.在顺序表L中第i个数据元素之前插入一个元素e。:

int  InsList(SeqList* L, int i, ElemType e)
{int k;if ((i < 1) || (i > L->last + 2)) /*首先判断插入位置是否合法*/{printf("插入位置i值不合法");return(ERROR);}if (L->last >= MAXSIZE - 1){printf("表已满无法插入");return(ERROR);}for (k = L->last;k >= i - 1;k--)   /*为插入元素而移动位置*/L->elem[k + 1] = L->elem[k];L->elem[i - 1] = e;   /*在C语言数组中,第i个元素的下标为i-1*/L->last++;return(OK);
}

6.在顺序表L中删除第i个数据元素:

int  DelList(SeqList* L, int i, ElemType* e)
/*在顺序表L中删除第i个数据元素,并用指针参数e返回其值。i的合法取值为1≤i≤L.last+1 */
{int k;if ((i < 1) || (i > L->last + 1)){printf("删除位置不合法!");return(ERROR);}*e = L->elem[i - 1];  /* 将删除的元素存放到e所指向的变量中*/for (k = i; k <= L->last; k++)L->elem[k - 1] = L->elem[k];  /*将后面的元素依次前移*/L->last--;return(OK);
}

7.显示顺序表L中的数据元素:

void Display(SeqList L)
/*显示顺序表L中的数据元素*/
{int i;for (i = 0; i <= L.last; i++){printf("%d  ", L.elem[i]);}printf("\n");
}

8.主函数:

void main()
{SeqList* l;int p, r, q;int* e;int i;l = (SeqList*)malloc(sizeof(SeqList));e = (int*)malloc(sizeof(int));printf("请输入线性表的长度:");scanf("%d", &r);l->last = r - 1;printf("请输入线性表的各元素值:\n");for (i = 0; i <= l->last; i++){scanf("%d", &l->elem[i]);}/*在顺序表中查找*/printf("请输入要查找的元素值:\n");scanf("%d", &q);p = Locate(*l, q);if (p == -1)printf("在此线性表中没有该元素!\n");elseprintf("该元素在线性表中的位置为:%d\n", p);/*顺序表的插入操作*/printf("请输入要插入的位置:\n");scanf("%d", &p);printf("请输入要插入的元素值:\n");scanf("%d", &q);InsList(l, p, q);printf("插入后的顺序表为:");Display(*l);/*顺序表的删除操作*/printf("请输入要删除的元素位置:\n");scanf("%d", &p);DelList(l, p, e);printf("删除后的顺序表为:");Display(*l);printf("删除的元素值为:%d\n", *e);
}

三、运行结果

线性表(顺序存储结构)C语言相关推荐

  1. 数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码

    数据结构严蔚敏C语言版-线性表顺序存储结构(顺序表)C语言实现相关代码 1.运行环境 2.准备工作 1)项目构建 1>新建一个SeqList项目 2>新建两个文件Sources和Heade ...

  2. 第三章 线性表---顺序存储结构

    线性表(List):零个或多个数据元素的有限序列. 若将线性表记为(a1, ..., ai-1, ai , ai+1 , ..., an),则表中 ai-1 领先于ai , ai领先于ai+1,称ai ...

  3. 使用Java模拟线性表顺序存储结构

    在数据结构中,线性表分两种结构 顺序结构和链表结构 下面使用Java模拟一下顺序结构 主要难点在顺序结构的插入和删除 import java.util.ArrayList;//线性表顺序存储结构 pu ...

  4. 线性表 :: 顺序存储结构的实现

    线性表 :: 顺序存储结构的实现 说明:本文属于读书笔记.笔者将以讲述的方式表达全片文章.故文中提到的某些字词是非正式术语,只是笔者本人的理解性词语. 线性表简介:想要了解点击此处 目录 顺序存储结构 ...

  5. 线性表定义 线性表顺序存储结构

    写在前面:本文章来自于在学习过程中的总结,供大家参考.因水平有限,博客中难免会有不足,恳请大佬们不吝赐教! 文章目录 线性表的定义 线性表的顺序存储结构 线性表顺序存储结构的优缺点 线性表的基本操作 ...

  6. 线性表顺序存储结构操作算法

    线性表顺序存储结构操作算法 ** 顺序表的初始化 线性表的插入算法 线性表的删除算法 线性表的查找算法** 根据书本的知识线性表顺序存储结构的操作算法其实是我们刚进入数据结构与算法的必修课 其实算法无 ...

  7. 线性表-顺序存储结构

    线性表-顺序存储结构 线性表基本概念: 线性结构的基本特征为: 集合中必存在唯一的一个"第一元素": 集合中必存在唯一的一个 "最后元素" : 除最后元素在外, ...

  8. 数据结构线性表顺序存储结构和主要算法实现

    (1) 线性表的定义. 零个或多个数据元素的有限序列 序列线性表中有直接后继元素,有且仅有一个直接后继,有且仅有一个直接前驱,数据元素之间的关系是一对一的关系 常用的List操作: Operation ...

  9. 线性表顺序存储结构图书管理

    线性表顺序存储结构图书管理 一开始看书里面的线性表的顺序存储结构,感觉简单,觉得动态链表才能做出一点东西,但是顺序存储不仅于此,也能做出来.顺序结构相比链式结构,内容上有较大差异,各有难点 文章目录 ...

  10. 《数据结构与算法》——线性表顺序存储结构的插入与删除

    什么是线性表? 线性表是最基本.最简单.也是最常用的一种数据结构.线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列. 线性表中数据元素之间的关系是一对 ...

最新文章

  1. 使用spring + ActiveMQ 总结
  2. 单链表反转的原理和python代码实现
  3. 云计算竞争愈发激烈,2019年云计算运维前景怎么样?
  4. 牛客题霸 NC22 合并两个有序的数组
  5. 手动添加oracle驱动到maven依赖,并使用springboot连接
  6. html meta页面自适应,【转载·收藏】 html5手机网站自适应需要加的meta标签
  7. 年轻有为的老黄2020
  8. 网络编程-网络分层的意义
  9. E1光端机和2M光端机有什么区别?
  10. sql server 数据库忘记sa账户密码/ 无管理员账户解决办法
  11. 怎么查看计算机的系统内存大小,Windows10系统怎么查看电脑内存大小
  12. 终于有人把RISC-V讲明白了
  13. 传输层端口号的范围是多少?被分为哪两部分_6.传输层协议
  14. java array 元素的位置_介绍java中的两种排序工具Arrays和Collections
  15. Uncaught RangeError: Maximum call stack size exceeded 超出最大调用值(个人解释)
  16. 芯片验证学习-设计知识补充学习2-38译码器
  17. 二分类最优阈值确定_结合mRMR选择和IFCM聚类的遥感影像分类算法
  18. 因为和同事交心,最终辞职了
  19. 【哼歌检索】十大语音搜索应用服务
  20. 教你搭建属于自己的私人云服务器 再也不怕网盘关闭了

热门文章

  1. [原创]使用squish打包与混淆cocos2d-x的lua脚本
  2. Gdevops 2018北京站归来
  3. python画k线图 自定周期_【量化小讲堂- Python、pandas技巧系列】极简方法将日线数据转为周线、月线或其他周期...
  4. 天才第一步,始于纸尿裤,科研第一步,始于读综述!
  5. Git安装以及解决图标不显示
  6. 自复式过欠压保护器的优势
  7. 史上最简单的excel处理工具(01)
  8. 【OpenGL】绘制球体
  9. 时代的一粒沙,压在个人头上便是整整的一座山
  10. linux基本命令——ulimit