【数据结构】(顺序表)C语言实现线性表顺序存储的创建、插入、删除、查找、输出等基本操作(附完整代码)

这篇具有很好参考价值的文章主要介绍了【数据结构】(顺序表)C语言实现线性表顺序存储的创建、插入、删除、查找、输出等基本操作(附完整代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

线性表的顺序存储结构

要求:利用书本上的线性表的顺序存储结构定义
#define MAXSIZE  100 //顺序表可能达到的最大长度
typedef struct{
ElemType *elem; // 存储空间基址
int length; // 当前长度
int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位)
} SqList;
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)要求编一菜单,根据选项逐个调用各函数;
(3)所编程序要具有一定的健壮性,即:在插入删除时要考虑表空、表满、位置是否合法等情况,当输入数据非法时,程序也能适当的做出反应,而不致于出现莫名其妙的结果。

//线性表的顺序存储结构
#include<stdio.h>
#include<stdlib.h>
//定义常量存储空间的初始化分配
#define MAXSIZE 100//顺序表可能达到的最大长度
#define TRUE 1
#define ERROR -1
#define FALSE 0
#define OK 1
typedef int Status;
typedef int ElemType;
typedef struct{
    ElemType *elem;//存储空间基址
    int length;//当前长度
    int listsize;//当前分配的存储容量(以sizeof(ElemType)为单位) 
}SqList;
Status listEmpty(SqList L)
{
    if(L.listsize==0) 
    {
        return TRUE; 
    }
    return FALSE;
} 
//初始化线性表 
Status initList(SqList *L)
{
    L->elem=(ElemType*)malloc(MAXSIZE*sizeof(ElemType));
    if(!L->elem)
    return ERROR;//存储分配失败
    L->length=0;//初始空表长度为零  
    L->listsize=MAXSIZE;//初始存储容量
    return OK; 
} 
//创建随机数线性表 
Status createList(SqList *L)
{
    int seed;
    printf("\n");
    L->length=1;
	printf("  请输入种子seed:");
       scanf("%d",&seed);   
        srand(seed);    
    for(L->length;L->length<=L->listsize;L->length++)
    {
     
        L->elem[L->length-1]=rand()%100+1;
    }
    return OK;
} 
//插入线性表数据 
Status listInsert(SqList *L,int i,ElemType x)
{
    //判断长度是否可以允许插入新的数据 
    if(L->length>=MAXSIZE)
    {
        printf("空间已满,不能再插入数据\n");
        return FALSE; 
    }
     //判断插入位置的合法性
    if(i<1||i>L->listsize) 
    {
        printf("插入位置不正确\n");
        return FALSE;
    }
    for(int j=L->listsize;j>=i;j--)
    {
        L->elem[j]=L->elem[j-1];
    }
    L->elem[i-1]=x;
    L->listsize++;
    return TRUE;
}
//删除线性表内的数据 
Status deleteList(SqList *L,int i)
{
    //判断线性表是否为空
    if(listEmpty(*L))
    {
        return ERROR;
    }
    //判断删除的位置是否合法
    if(i<1||i>L->listsize) 
    {
        printf("删除位置不合法\n");
        return ERROR;
    }
    printf("  要删除的第%d个位置上的值是%d\n",i,L->elem[i-1]);
    for(i;i<L->listsize;i++)
    {
        L->elem[i-1]=L->elem[i];
    }
    L->listsize--;
    return TRUE;
} 
//查找线性表内的数据 
Status locateElem(SqList L, ElemType x)
{
    for(int i=0;i<L.listsize;i++)
    {
        if(L.elem[i]==x)
        {
            return i+1;
        }
    }
    printf("\n没有查找到元素%d指定的下标\n",x);
    return ERROR;
}  
Status listTraverse(SqList L)
{
    int i;
    for(i=0;i<L.listsize;i++)
    {
        printf("%2d ",L.elem[i]);
    }
    printf("\n");
    return OK;
} 
int main() 
{
    SqList L;
    ElemType x,elem;
    int option=1,i;
    while(option)
    {
        printf("\n           函数功能        \n----------------------------------\n  *****************************\n  *1.初始化线性表             *\n  *2.随机创建线性表           *\n  *3.插入线性表数据           *\n  *4.删除第i个元素            *\n  *5.查找线性表中是否存在定值x*\n  *6.输出线性表中所有元素     *\n  *7.退出程序                 *\n  *****************************\n\n请输入要执行的操作(1--7):"); 
        scanf("%d",&option);
        switch(option)
        {
            case 1:
                initList(&L);
                break;
            case 2:
                printf("\n  请输入所创建的数据个数:");
                scanf("%d",&L.listsize);
				if(L.listsize<=0||L.listsize>MAXSIZE)
                {
                    printf("个数无效!!!\n");
                    break;
                }
                createList(&L);
                printf("\n  创建后:"); 
                listTraverse(L); 
                break;
            case 3:
                printf("\n  请分别输入要插入的位置i(1--%d)、数字x:",L.listsize);
                scanf("%d%d",&i,&x);
			    if(i<=0)
                {
                    printf("位置无效!!!\n");
                    break;
                }
                printf("\n  插入前:");
                listTraverse(L); 
                listInsert(&L,i,x);
                printf("  插入后:");
                listTraverse(L);
                break;
            case 4:
                printf("\n  请输入要删除数字的位置i:");
                scanf("%d",&i);
                if(listEmpty(L))
                {
                    printf("该表为空!");
                    break; 
                } 
                
                printf("\n  删除前:"); 
                listTraverse(L);    
                deleteList(&L,i);           
                printf("  删除后:"); 
                listTraverse(L);
                break;
            case 5:
                printf("\n  请输入要查找的数字x:");
                scanf("%d",&x);
                i=locateElem(L,x);
                if(i!= ERROR)
                {
                    printf("\n  值为%d的数字在第%d个位置\n",x,i);
                    
                }
                break;
                printf("  线性表内的数据:"); 
                listTraverse(L);
            case 6:
                printf("\n  线性表内的数据为:"); 
                listTraverse(L);
                break;
            case 7:
                return OK;  
        }
    }
    return 0; 
}

希望能帮助到各位,欢迎大家在此交流评论。文章来源地址https://www.toymoban.com/news/detail-861370.html

到了这里,关于【数据结构】(顺序表)C语言实现线性表顺序存储的创建、插入、删除、查找、输出等基本操作(附完整代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】详谈队列的顺序存储及C语言实现

    大家好,很高兴又和大家见面啦!!! 在上一篇内容中,我们在介绍完队列的基本概念、重要术语以及基本操作后,又回顾了一下数据结构的三要素——数据的逻辑结构、数据的存储结构以及数据的运算。 队列这种数据结构我们已经介绍了它的逻辑结构以及数据运算的定义

    2024年01月21日
    浏览(61)
  • C/C++数据结构---顺序表---线性存储结构

    个人主页: 仍有未知等待探索_小项目,洛谷刷题,数据结构-CSDN博客 专题分栏---数据结构: 数据结构_仍有未知等待探索的博客-CSDN博客 目录 一、知识储备 二、引例  三、顺序表 第一步,先创建一个顺序表类型 第二步,定义和初始化顺序表    第三步,顺序表的基本操作

    2024年02月08日
    浏览(26)
  • 数据结构入门(C语言版)线性表中顺序表介绍及接口实现

    C语言的学习结束,就该入门数据结构了呦 不论在程序员的工作上,还是在学习或是考研上,数据结构都是一门非常重要且值得我们一直研究探索的学科,可以说数据结构和算法就是编程的核心。OK,接下来我们来到数据结构的入门第一步就是学习线性表,接下来由作者来详细

    2023年04月12日
    浏览(34)
  • 【数据结构初阶】五、线性表中的栈(C语言 -- 顺序表实现栈)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【数据结构初阶】四、线性表里的链表(带头+双向+循环 链表 -- C语言实现)_高高的胖子的博客

    2024年02月08日
    浏览(33)
  • 【数据结构初阶】七、非线性表里的二叉树(堆的实现 -- C语言顺序结构)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【数据结构初阶】六、线性表中的队列(链式结构实现队列)-CSDN博客  ===========================

    2024年02月08日
    浏览(30)
  • 头歌(C语言)-数据结构与算法-队列-第1关:实现一个顺序存储的队列

    任务描述 相关知识 顺序存储的队列 顺序队列的主要操作 编程要求 测试说明 任务描述 本关任务:实现 step1/SeqQueue.cpp 中的 SQ_IsEmpty 、 SQ_IsFull 、 SQ_Length 、 SQ_In 和 SQ_Out 五个操作函数,以实现判断队列是否为空、是否为满、求队列长度、队列元素入队和出队等功能。 相关知

    2024年02月06日
    浏览(93)
  • 头歌(C语言)-数据结构与算法-栈的实现-第1关:实现一个顺序存储的栈

    任务描述 相关知识 栈的基本概念 栈结构的定义(C) 顺序栈的操作 编程要求 测试说明 任务描述 本关任务是实现 step1/SeqStack.cpp 中的 SS_IsFull 、 SS_IsEmpty 、 SS_Length 、 SS_Push 和 SS_Pop 五个操作函数,以实现判断栈是否为满、是否为空、求栈元素个数、进栈和出栈等功能。 相关

    2024年02月07日
    浏览(43)
  • 【数据结构】线性表(顺序存储和链式存储)两种方法,细节满满,保你学会

    ⭐⭐⭐⭐⭐⭐ 🎊专栏【数据结构】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【勋章】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 ⭐⭐⭐⭐⭐⭐  目录 ⭐定义:  ⭐ 理解: ⭐存储方式 : ⭐顺序存储的优缺点: 优点: 缺点: ⭐链式存储的优

    2023年04月09日
    浏览(26)
  • C语言数据结构(2)——线性表其一(顺序表)

    欢迎来到博主的新专栏——C语言数据结构 博主ID:代码小豪 再开始这篇文章之前,我们假设要对10个数据进行操作。这十个数据全都被声明成10个变量 如果我们准备为这些数据增加功能,将他们进行赋值,打印,交换等。就会发现一个特别棘手的问题,这些程序写起来太繁杂

    2024年01月19日
    浏览(29)
  • [数据结构(C语言版本)上机实验]稀疏矩阵的三元组顺序表压缩存储以及转置实现(含快速转置)

    实现效果: 1、编写程序任意 输入 一个稀疏矩阵,用 三元组顺序表 压缩存储 稀疏矩阵 。 2、对稀疏矩阵进行 转置 , 输出 转置后的矩阵。 对应《数据结构(C语言版)》 第5章 数组与广义表 实验: 1、 掌握下三角矩阵的输入、输出、压缩存储算法; 2、 理解稀疏矩阵的三元

    2024年02月03日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包