数据结构教程实验一顺序表基本操作的实现

这篇具有很好参考价值的文章主要介绍了数据结构教程实验一顺序表基本操作的实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验一  顺序表基本操作的实现

一、实验目的

1.掌握线性表的顺序存贮结构及基本操作,深入了解顺序表的基本特性,以便在实际问题背景下灵活运用它们。

2.深入理解和灵活掌握顺序表的插入、删除等操作。

二、实验环境

1.硬件:每个学生需配备计算机一台。

2.软件:Windows操作系统+Visual C++。

三、实验要求

    1.将建表、遍历、插入、删除分别定义为4个子函数,通过主函数实现对上述子函数的调用。

2.输入数据:数据类型设定为整型

四、实验内容

实现顺序表各种基本运算的基础上,设计主程序,完成如下功能:

(1)初始化顺序表L。

(2)依次插入2,5,7,9,10共5个元素。

(3)输出顺序表L。

(4)输出顺序表L的长度。

(5)判断顺序表L是否为空。

(6)输出顺序表L第4个元素。

(7)输出元素5的位置。

(8)在第4个元素的位置上插入元素100。

(9)输出顺序表L。

(10)删除顺序表L的第3个元素。

(11)输出顺序表L。

(12)释放顺序表L。

实现程序:

#include<stdio.h>

#include<malloc.h>

#define MaxSize 50

typedef int ElemType;

//定义顺序表

typedef struct{

ElemType data[MaxSize]; //存放顺序表元素

int length; //存放顺序表的长度

}SqList; //声明顺序表的类型

//创建顺序表

void CreateList(SqList *&L,ElemType a[],int n)

{

int i=0,k=0;

L=(SqList *)malloc(sizeof(SqList));

while(i<n)

{

L->data[k]=a[i];

k++;

i++;

}

L->length=k;

}

//初始化线性表

void InitList(SqList *&L){

L=(SqList *)malloc(sizeof(SqList));

L->length=0;

}

//销毁线性表

void DestroyList(SqList *&L){

free(L);

}

//判断线性表是否为空表

bool ListEmpty(SqList *L){

return(L->length==0);

}

//求线性表的长度

int ListLength(SqList *L){

return(L->length);

}

//输出顺序表

void DispList(SqList *L)

{

for(int i=0;i<L->length;i++)

{

printf("%d",L->data[i]);


}

}

//求线性表的第i个元素

bool GetElem(SqList *L,int i,ElemType &e)

{

if(i<1 || i>L->length)

return false;

e=L->data[i-1];

return true;

}

//查找第一个值为e的元素值

int LocateElem(SqList *L,ElemType e)

{

int i=0;

while(i<L->length && L->data[i]!=e)

i++;

if(i>=L->length)

return 0;

else

return i+1;

}

//插入第i个元素

bool ListInsert(SqList *&L,int i,ElemType e)

{

int j;

if(i<1 || i>L->length+1 || L->length==MaxSize)

return false;

i--;

for(j=L->length;j>i;j--)

L->data[j]=L->data[j-i];

L->data[i]=e;

L->length++;

return true;

}

//删除第i个元素

bool ListDelete(SqList *&L,int i,ElemType &e)

{

int j;

if(i<1 || i>L->length)

return false;

i--;

e=L->data[i];

for(j=i;j<L->length-1;j++)

L->data[j]=L->data[j+1];

L->length--;

return true;

}

void main()

{

SqList *L;

ElemType e;

printf("顺序表的基本运算如下:\n");

printf("(1)初始化顺序表L\n");InitList(L);

printf("(2)依次插入2,5,7,9,10\n");

int i,y;

char s;

//循环输入,遇到回车停止输入

for(i=1;i<51&&s!='\n';i++){

scanf("%d",&y);

s=getchar();

ListInsert(L,i,y);

}

printf("(3)输出顺序表L");DispList(L);

printf("\n(4)输出顺序表L长度:%d\n",ListLength(L));

printf("(5)顺序表L为%s\n",(ListEmpty(L)?"空":"非空"));

GetElem(L,3,e);

printf("(6)顺序表L的第3个元素:%d\n",e);

printf("(7)元素5的位置:%d\n",LocateElem(L,5));

printf("(8)在第4个元素位置上插入100");ListInsert(L,4,100);

printf("\n(9)输出顺序列表L:");

DispList(L);

printf("\n(10)删除L的第3个元素\n");

ListDelete(L,3,e);

printf("(11)输出顺序表L:");

DispList(L);

printf("\n(12)释放顺序表L\n");

DestroyList(L);

}

运行结果:

数据结构实验一顺序表实验报告,数据结构实验报告,数据结构

测试结果:

通过!

2.顺序表的应用

(1)设计算法,删除顺序表中所有值等于x的元素。

实现程序:

#include<stdio.h>

#include<malloc.h>

#define MaxSize 50

typedef int ElemType;

//定义顺序表

typedef struct{

ElemType data[MaxSize]; //存放顺序表元素

int length; //存放顺序表的长度

}SqList; //声明顺序表的类型

//创建顺序表

void CreateList(SqList *&L,ElemType a[],int n)

{

int i=0,k=0;

L=(SqList *)malloc(sizeof(SqList));

while(i<n)

{

L->data[k]=a[i];

k++;

i++;

}

L->length=k;

}

//初始化线性表

void InitList(SqList *&L){

L=(SqList *)malloc(sizeof(SqList));

L->length=0;

}

//销毁线性表

void DestroyList(SqList *&L){

free(L);

}

//输出顺序表

void DispList(SqList *L)

{

for(int i=0;i<L->length;i++)

{

printf("%d",L->data[i]);

}

}

//插入第i个元素

bool ListInsert(SqList *&L,int i,ElemType e)

{

int j;

if(i<1 || i>L->length+1 || L->length==MaxSize)

return false;

i--;

for(j=L->length;j>i;j--)

L->data[j]=L->data[j-i];

L->data[i]=e;

L->length++;

return true;

}

//顺序表的删除

bool Delete(SqList *&L,int a)

{

   int k=0;

for(int i=0;i<L->length ;i++)

{

if(L->data[i]==a)//当前元素为a时k增1

{

k++;

}

else

{

L->data [i-k]=L->data [i];//当前元素不a时将其前移k个位置

}

}

L->length -= k;//顺序表L的长度减K

    return true;

}

void main()

{

SqList *L;

InitList(L);

printf("请输入顺序表用空格分开按回车结束\n");

int i,y;

char s;

for(i=1;i<51&&s!='\n';i++){

scanf("%d",&y);

s=getchar();

ListInsert(L,i,y);

}

printf("输出顺序表L");DispList(L);

    printf("\n请输入删除元素:\n");

    int a;

    scanf("%d",&a);

    Delete(L,a);

printf("输出顺序表L\n");

   DispList(L);

}

运行结果:

数据结构实验一顺序表实验报告,数据结构实验报告,数据结构

测试结果:

通过!

(2)设计算法,将顺序表L中所有奇数移动到偶数的前面。

实现程序:

#include<stdio.h>

#include<malloc.h>

#define MaxSize 50

typedef int ElemType;

//定义顺序表

typedef struct{

ElemType data[MaxSize]; //存放顺序表元素

int length; //存放顺序表的长度

}SqList; //声明顺序表的类型

//创建顺序表

void CreateList(SqList *&L,ElemType a[],int n)

{

int i=0,k=0;

L=(SqList *)malloc(sizeof(SqList));

while(i<n)

{

L->data[k]=a[i];

k++;

i++;

}

L->length=k;

}

//初始化线性表

void InitList(SqList *&L){

L=(SqList *)malloc(sizeof(SqList));

L->length=0;

}

//销毁线性表

void DestroyList(SqList *&L){

free(L);

}

//插入第i个元素

bool ListInsert(SqList *&L,int i,ElemType e)

{

int j;

if(i<1 || i>L->length+1 || L->length==MaxSize)

return false;

i--;

for(j=L->length;j>i;j--)

L->data[j]=L->data[j-i];

L->data[i]=e;

L->length++;

return true;

}

//输出顺序表

void DispList(SqList *L)

{

    int i,b;

int a=0;

int j=L->length-1;

    while(a<j){

while((j>=0)&&(L->data[j]%2==0))

j--;

while((a<j)&&(L->data[a]%2==1))

a++;

if(a<j){

b=L->data[j];

L->data[j]=L->data[a];

L->data[a]=b;

}

}

for(i=0;i<L->length;i++){

printf("%d",L->data[i]);

}

}

void main()

{

SqList *L;

InitList(L);

printf("请输入顺序表用空格分开按回车结束\n");

int i,y;

char s;

for(i=1;i<51&&s!='\n';i++){

scanf("%d",&y);

s=getchar();

ListInsert(L,i,y);

}

printf("输出顺序表L");

DispList(L);

printf("\n");

DestroyList(L);

}

运行结果:

数据结构实验一顺序表实验报告,数据结构实验报告,数据结构

测试结果:

通过!

五、思考题

1.删除顺序表中自第i个元素起连续k个元素。

程序实现:

#include<stdio.h>

#include<malloc.h>

#define MaxSize 50

typedef int ElemType;

//定义顺序表

typedef struct{

ElemType data[MaxSize]; //存放顺序表元素

int length; //存放顺序表的长度

}SqList; //声明顺序表的类型

//创建顺序表

void CreateList(SqList *&L,ElemType a[],int n)

{

int i=0,k=0;

L=(SqList *)malloc(sizeof(SqList));

while(i<n)

{

L->data[k]=a[i];

k++;

i++;

}

L->length=k;

}

//初始化线性表

void InitList(SqList *&L){

L=(SqList *)malloc(sizeof(SqList));

L->length=0;

}

//销毁线性表

void DestroyList(SqList *&L){

free(L);

}

//判断线性表是否为空表

bool ListEmpty(SqList *L){

return(L->length==0);

}

//求线性表的长度

int ListLength(SqList *L){

return(L->length);

}

//输出顺序表

void DispList(SqList *L)

{

for(int i=0;i<L->length;i++)

{

printf("%d",L->data[i]);


}

}

//插入第i个元素

bool ListInsert(SqList *&L,int i,ElemType e)

{

int j;

if(i<1 || i>L->length+1 || L->length==MaxSize)

return false;

i--;

for(j=L->length;j>i;j--)

L->data[j]=L->data[j-i];

L->data[i]=e;

L->length++;

return true;

}

//顺序表的删除

bool Delete(SqList *&L,int a)

{

    if(L->length==0)    //线性表为空

    return 0;

    if(a<L->length)

    {

        for(int i=a;i<L->length;i++)

        {

            L->data[i-1]=L->data[i];

        }

        L->length--;

    }


    return 1;

}

void main()

{

SqList *L;

InitList(L);

printf("请输入顺序表用空格分开按回车结束\n");

int i,y;

char s;

for(i=1;i<51&&s!='\n';i++){

scanf("%d",&y);

s=getchar();

ListInsert(L,i,y);

}

printf("输出顺序表L");DispList(L);

    printf("\n请输入删除的位置和删除的元素个数:\n");

    int a,b;

    scanf("%d%d",&a,&b);

    if(b>=L->length)

    {

        printf("输入有误\n");

       

    }

    else

    {

        while(b--)

        {

            Delete(L,a);

       }

    }

printf("输出顺序表L\n");

    DispList(L);

DestroyList(L);

}

运行结果:

数据结构实验一顺序表实验报告,数据结构实验报告,数据结构

测试结果:

通过!

2.已知顺序表递减有序,将元素x插入,保持其有序性

程序实现:

#include<stdio.h>

#include<malloc.h>

#define MaxSize 50

typedef int ElemType;

//定义顺序表

typedef struct{

ElemType data[MaxSize]; //存放顺序表元素

int length; //存放顺序表的长度

}SqList; //声明顺序表的类型

//创建顺序表

void CreateList(SqList *&L,ElemType a[],int n)

{

int i=0,k=0;

L=(SqList *)malloc(sizeof(SqList));

while(i<n)

{

L->data[k]=a[i];

k++;

i++;

}

L->length=k;

}

//初始化线性表

void InitList(SqList *&L){

L=(SqList *)malloc(sizeof(SqList));

L->length=0;

}

//销毁线性表

void DestroyList(SqList *&L){

free(L);

}

//输出顺序表

void DispList(SqList *L)

{

int n;

int l;

n=L->length;

//冒泡排序法从小到大排序

for(int i=0;i<n-1;i++)

{

for(int j=0;j<n-1-i;j++){

if(L->data[j]<L->data[j+1]){

l=L->data[j];

L->data[j]=L->data[j+1];

L->data[j+1]=l;

}

}


}

for(i=0;i<L->length;i++){

printf("%d",L->data[i]);

}

}

//插入元素

bool ListInserts(SqList *&L,int i,ElemType e)

{

int j;

if(i<1 || i>L->length+1 || L->length==MaxSize)

return false;

i--;

for(j=L->length;j>i;j--)

L->data[j]=L->data[j-i];

L->data[i]=e;

L->length++;

return true;

}

//插入新增元素到最后

bool ListInsert(SqList *&L,ElemType e)

{

int i;

i=L->length+1;

ListInserts(L,i,e);

return true;


}

void main()

{

SqList *L;

InitList(L);

printf("请输入顺序表用空格分开按回车结束\n");

int i,y;

char s;

for(i=1;i<51&&s!='\n';i++){

scanf("%d",&y);

s=getchar();

ListInserts(L,i,y);

}

printf("输出顺序表L");DispList(L);

printf("\n输入要插入的元素");

int f;

scanf("%d",&f);

ListInsert(L,f);

printf("再次输出顺序表");

DispList(L);

printf("\n");

DestroyList(L);

}

运行结果:

数据结构实验一顺序表实验报告,数据结构实验报告,数据结构

测试结果:

通过!

六、实验总结

通过本次增加了对C语言的掌握,对顺序表的建表、初始化、输出等操作有了进一步的认识,同时对C语言主函数和子函数的调用进一步的认识。领会顺序表存储结构和掌握顺序表中各种基本运算算法的设计。对C语言循环结构、冒泡排序法等方法进行了复习。在实验过程中会出现很多问题,出现程序报错的情况。在测试阶段发现出现的错误基本为小错误,如参数错误,调用错误,返回值错误等。一个程序最可怕的是无报错错误,在程序不报错的情况下运行结果和实验结果不同,经过调试后最终和实验结果相同。文章来源地址https://www.toymoban.com/news/detail-724358.html

到了这里,关于数据结构教程实验一顺序表基本操作的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【数据结构】 顺序栈的基本操作 (C语言版)

    目录 一、顺序栈 1、顺序栈的定义: 2、顺序栈的优缺点 二、顺序栈的基本操作算法(C语言)    1、宏定义  2、创建结构体 3、顺序栈的初始化  4、顺序栈的入栈 5、顺序栈的出栈 6、取栈顶元素 7、栈的遍历输出 8、顺序栈的判空 9、顺序栈的判满  10、求顺序栈长度 11、顺

    2024年01月24日
    浏览(52)
  • 基于C语言的数据结构之顺序表——带你熟练掌握顺序表基本操作!!超级详细!!

    目录 前言: 1.源代码如下 2.数据结构——顺序表    2.1.顺序表的特点    2.2顺序表的分类     2.2.1.动态分配内存的顺序表     2.2.2.静态分配内存的顺序表    2.3.定义一个顺序表 3.顺序表的基本操作    3.1初始化顺序表     不用将顺序表中可能存在的原有元素初始化吗?

    2024年04月26日
    浏览(41)
  • 数据结构:定长顺序串(SString)基本操作的算法描述(C语言)

    作者在学习数据结构时,发现鲜有完全按照 C 语言描述的算法操作,这让习惯于写 .c 而不是 .cpp 的初学者很是头疼。本文将基于 C 语言描述算法操作,如有错漏还望大佬们指正。 本文将按照严惠敏所著《数据结构(C语言版)》所做的函数原型声明进行算法描述,由于C语言不支

    2024年02月07日
    浏览(72)
  • 数据结构 线性表的定义和基本操作(以顺序表为例)

    名人说:一花独放不是春,百花齐放花满园。——《增广贤文》 作者:Code_流苏(CSDN) (一个喜欢古诗词和编程的Coder😊) 以下代码个人分享出来,仅供学习交流,且仅在CSDN平台发布,未经授权禁止二次转发。 〇、线性表是什么? 1、定义 线性表 是具有 相同数据类型 的 n(

    2024年02月12日
    浏览(62)
  • 数据结构(C语言实现)——顺序表的介绍及基本操作的实现

    今天我们来学习数据结构中的线性表,本文主要介绍一种常见的线性表——顺序表。 本文着重介绍顺序表的概念以及顺序表各种基本操作的实现过程(C语言实现),以后会更新更多的数据结构,觉得有用的朋友可以三连关注一波,一起学习。 线性表(linear list)是n个具有相

    2023年04月13日
    浏览(52)
  • 【数据结构】顺序表的实现及基本操作完整代码(C语言实现)

    顺序表:逻辑上相邻的数据元素,其物理次序也是相邻的 这里之所以要把int分别创建新名字为SqlElemType和Status,是因为实际应用时数据的类型不一定是int型,这样设置方便修改元素类型,提高代码适用性。 LocateElem的时间复杂度为O(n) InsertSq的时间复杂度为O(n) DeleteSq的时间

    2024年04月12日
    浏览(50)
  • 数据结构-线性表的顺序表基本操作代码实现(超级详细清晰 C++实现)

    顺序表是用一段 物理地址连续的存储单元 依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。 顺序表: 可动态增长的数组,要求数据是连续存储的 特点: 随机访问 顺序既可以 静态分配 ,也可以 动态分配 。在静态分配时,由于数组

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

    要求:利用书本上的线性表的顺序存储结构定义 #define MAXSIZE 100 //顺序表可能达到的最大长度 typedef struct{ ElemType *elem; // 存储空间基址 int length; // 当前长度 int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位) } SqList; 1)编写完成下列功能的函数: (1)初始化一个线性表

    2024年04月28日
    浏览(48)
  • 【数据结构】线性表(一)线性表的定义及其基本操作(顺序表插入、删除、查找、修改)

    目录 一、线性表 1. 线性表的定义 2. 线性表的要素 二、线性表的基本操作 三、线性表的顺序存储结构 1. 定义 2. 顺序表的操作       a. 插入操作 b. 删除操作 c. 查找操作 d. 修改操作 e. 代码实例          一个线性表是由零个或多个 具有相同类型的结点 组成的有序集合。

    2024年02月03日
    浏览(69)
  • 数据结构实验4:二叉树的基本操作

    一、问题描述 运用二叉链表实现二叉树的基本操作,包括:创建二叉树的存储结构、复制已有的二叉树、计算已有的二叉树的深度、先根序序列、中根序序列、后根序序列等。 输入格式:AB#C##D## 二、实验目的 掌握二叉链表及二叉树的基本操作。 三、实验内容及要求 1、构造

    2024年01月23日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包