要求:利用书本上的线性表的顺序存储结构定义:

1)编写完成下列功能的函数:(1)初始化一个线性表;(2)在已经初始化的基础上,创建一个包含15个不大于100的正整数值的线性表(15个值由计算机随机产生);(3)将一个数x插在第i个元素前(x和i在程序运行时输入);(4)删除第i个元素(i在程序运行时输入),并在删除结束后输出删除元素的值;(5)查找给定值x是否在线性表中(x在程序运行时输入),若在,输出x在线性表中第一次出现的位置,若不在就输出x不在表中的提示;(6)输出线性表中所有元素。

2)要求编一菜单,根据选项调用各函数执行,并在使线性表有所变化的每一步输出线性表的内容,以验证你编程序的正确性。

备注:(1)在C的头文件stdlib.h中有srand( )接受随机数的种子和rand( )产生0~RAND_MAX的一个随机整数的函数。用rand( )%100+1可以产生不大于100的正整数值。(2)所编程序要具有一定的健壮性,即:在插入删除时要考虑表空、表满、位置是否合法等情况,当输入数据非法时,程序也能适当的做出反应,而不致于出现莫名其妙的结果。

步骤:

1.初始化一个线性表;

2.使用srand( )接受随机数的种子和rand( )随机产生包含15个不大于100的正整数值的线性表,输出线性表的值使操作者观察此步是否完成;

3.将所插入数x和插入位置i传入函数中,并判断插入位置i是否合法,若合法将i以后的数字全部后移一位,把位置空给x,使数字x插入到未知i中,若不合法则报错;

4.将所删除的位置i传入函数中,先判断i是否合法,若合法则将位置i以后的所有元素前移一位,以达到删除的目的,再将删除数字赋给一未知数并输出,若不合法则报错;

5.从线性表第一个数字起逐个后移并查找是否与给定值x相等,若相等则在线性表中(x在程序运行时输入),并输出x在线性表中第一次出现的位置,若不在输出x不在表中;

6.利用for循环逐个输出线性表中所有元素。

7.编写一菜单,便于使用者根据选项调用各函数执行

8.使用switch()执行使用者的操作。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<ctime>
#define   TRUE         1
#define   FALSE        0
#define   OK           1
#define   ERROR        0
#define   OVERFLOW     -2
#define   MAXSIZE      100
typedef int ElemType;
typedef int Status;
typedef struct SQLIST{ElemType *elem;int length;
}SqList;Status InitList(SqList &L)
{L.elem=(ElemType*)malloc(MAXSIZE*sizeof(ElemType));if(!L.elem) return ERROR;L.length=0;return OK;
}//创建初始线性表
Status ValueList(SqList &L)
{srand(time(0));for(int i=0;i<15;i++){L.elem[i]=rand()%100+1;L.length+=1;}printf("线性表中元素为:");for(int i=0;i<L.length;i++){printf("%4d",L.elem[i]);}printf("\n");return OK;
}//赋值初始线性表
Status InsertList(SqList &L,int i,int x)
{if(i<1||i>(L.length+1)){printf("您输入的未知或程序出现错误!");return ERROR;}for(int j=L.length;j>=i;j--){L.elem[j]=L.elem[j-1];}L.elem[i-1]=x;L.length++;printf("线性表中元素为:");for(int i=0;i<L.length;i++){printf("%4d",L.elem[i]);}printf("\n");return OK;
}//将一个数x插在第i个元素前(x和i在程序运行时输入)
Status DestroyElem(SqList &L,int i)
{int y,j;if(i<1||i>L.length){printf("您输入的未知或程序出现错误!");return ERROR;}y=L.elem[i-1];for(j=i;j<=L.length;j++){L.elem[j-1]=L.elem[j];}L.length--;printf("线性表中元素为:");for(int i=0;i<L.length;i++){printf("%4d",L.elem[i]);}printf("\n");printf("删除的元素为数字:%d\n",y);return OK;
}//删除并输出第i个元素
Status FindElem(SqList &L,int x)
{int i;for(i=0;i<L.length;i++){if(L.elem[i]==x){printf("元素在线性表中,且元素%d的位置为%d\n",x,(i+1));break;}}if(i==L.length) printf("元素%d不在线性表中\n",x);return OK;
}//查找给定值x是否在线性表中
Status PutList(SqList &L)
{for(int i=0;i<L.length;i++){printf("第%2d个元素:%4d\n",(i+1),L.elem[i]);}
}//输出线性表中所有元素
int menu()
{printf("菜单:\n");printf("1.初始化一个线性表\n2.赋值初始线性表\n3.插入元素\n4.删除元素\n5.查找元素\n6.输出线性表\n7.结束程序\n");printf("请输入您要实施的项目:");
}
int main()
{int option,location,element;SqList List;InitList(List);menu();scanf("%d",&option);while(option!=7){switch(option){case 1:printf("1.线性表初始化完成!\n");break;case 2:printf("2:赋值初始线性表\n");ValueList(List);break;case 3:printf("3:插入一个数字\n");printf("插入元素位置:");scanf("%d",&location);printf("插入元素数值:");scanf("%d",&element);InsertList(List,location,element);break;case 4:printf("4:删除一个数字\n");printf("删除元素位置:");scanf("%d",&location);DestroyElem(List,location);break;case 5:printf("5:查找元素\n");scanf("%d",&element);FindElem(List,element);break;case 6:printf("6.输出元素:\n");PutList(List);break;default:printf("输入菜单名称错误\n");break;}menu();scanf("%d",&option);};printf("程序已结束,bye!");return 0;
}

线性表的顺序存储结构及操作的实现相关推荐

  1. 线性表的顺序存储结构和操作实现

    参考 数据结构(c语言描述)(第二版)徐孝凯 编著 自定义头文件 头文件名:List.h #ifndef LIST_H_INCLUDED #define LIST_H_INCLUDED typedef ...

  2. 数据结构和算法:(3)3.1线性表的顺序存储结构

    -----------------------1.线性表基础操作------------------------ 线性表:(List)由零个或多个数据元素组成的有限序列. 首先他是一个序列,元素之间是 ...

  3. C和C++线性表的顺序存储结构

    C和C++线性表的顺序存储结构 基本概念 设计与实现 优点和缺点 基本概念 设计与实现 插入元素算法 判断线性表是否合法 判断插入位置是否合法 把最后一个元素到插入位置的元素后移一个位置 将新元素插入 ...

  4. 《数据结构》c语言版学习笔记——线性表的顺序存储结构

    线性表的顺序存储结构 第一章 线性表的顺序存储结构 文章目录 线性表的顺序存储结构 前言 一.顺序存储结构的建立 1.条件 2.代码 二.顺序存储结构的获得元素 1.条件 2.代码 三.顺序存储结构的 ...

  5. 线性表的顺序存储结构之顺序表类的实现_Java

    在上一篇博文--线性表接口的实现_Java中,我们实现了线性表的接口,今天让我们来实现线性表的顺序存储结构--顺序表类. 首先让我们来看下顺序表的定义: 线性表的顺序存储是用一组连续的内存单元依次存放 ...

  6. 数据结构开发(3):线性表的顺序存储结构

    0.目录 1.线性表的本质和操作 2.线性表的顺序存储结构 3.顺序存储结构的抽象实现和具体实现 3.1 SeqList 3.2 StaticList 和 DynamicList 4.顺序存储线性表的 ...

  7. 线性表:2.线性表的顺序存储结构--顺序表及C语言实现

    逻辑结构上呈线性分布的数据元素在实际的物理存储结构中也同样相互之间紧挨着,这种存储结构称为 线性表的顺序存储结构 . 也就是说,逻辑上具有线性关系的数据按照前后的次序全部存储在一整块连续的内存空间中, ...

  8. 数据结构之线性表之顺序存储结构(3)

    1 前言 经过前两张的理论基础,我相信大家都能简单的明白了数据结构和算法一些常用的概念了,从今天开始我们开始学习数据结构中线性表,一起叩响数据结构的大门. 2 详述 线性表(List):零个或者多个数 ...

  9. 线性表之顺序存储结构

    第三章 线性表:零个或多个数据元素的有限序列. 若将线性表标记为(a1,a2,...ai-1,ai,ai+1,...,an), 当i=1,2,...n-1时,ai有且仅有一个直接后继, 当i=2,3, ...

最新文章

  1. 学习如何写 Bug 的一天! | 每日趣闻
  2. Java长存!12个Java长久占居主要地位的原因
  3. 19倍超音速“大炮”轰出可控核聚变!成本仅为传统方法0.1%,腾讯已投资
  4. 重装WIN7之后使用Ubuntu LiveCD修复grub2双系统引导
  5. Stanford UFLDL教程 用反向传导思想求导
  6. SAP: ALV的布局管理
  7. boost::mp11::mp_plus相关用法的测试程序
  8. 【设计模式】—— 中介者模式Mediator
  9. CF786E-ALT【网络流,倍增】
  10. 读人人都是产品经理__2
  11. 常用转义符的使用 java 0133
  12. 零基础如何学前端,如何规划?
  13. python是什么专业-python有什么用(会计专业)
  14. Subversion 服务配置安装手记(一)
  15. 创建与管理Oracle的分区表和本地索引
  16. cadence17.4 设计PCB零基础教程入门学习过程
  17. Java生成验证码合集(一)简单版
  18. 百度logo识别SDK108问题解决
  19. mac免安装mysql配置_mysql免安装版配置使用
  20. css3动态渐变动画

热门文章

  1. Java11新特性(一)——JDK11新特性概述
  2. FinTech研发报告-之大数据技术
  3. Tomcat的环境配置
  4. 关于解决required a bean of type ‘XXX’ that could not be found.的问题
  5. ROS2入门之基本介绍
  6. Openwrt路由器挂载摄像头教程
  7. 2016年最新VIN(车辆识别码)解析
  8. Android热补丁动态更新实践
  9. CSS3模拟中文/英文打字效果
  10. PC_app自动化程序测试(一)