数据结构 实验一 顺序表的操作

    技术2026-02-28  7

    一、顺序表的操作

    任务一:初始化一个顺序表并输出。 相关知识: 需要掌握: 1.结构体变量初始化 2.如何遍历顺序表。 结构体变量初始化: 定义结构体变量的同时,给结构体变量的各个成员变量赋值。 示例如下: sequenlist sq={{1,3,6,7},3}; {1,3,6,7}是给结构体中的数组赋值, 3.给成员变量 last 赋值 遍历顺序表: 给定一个顺序表L,从0~L->last,依次输出,就可以遍历完顺序表中的所有元素。 其中L是指向顺序表的指针。 示例如下: void listprint (sequenlist L) /输出线性表/ { int i; for(i=0;i<=(L).last;i++) printf(“%d “,L->vec[i]); } 输出:1 3 6 7 示例代码如下:(温馨提示:本文全部代码只在 EduCoder 平台上通过测试,仅供参考,如有运行错误请自行改正)

    #define MAXSIZE 100 /*宏定义*/ #define OK 1 #define OVERFLOW -2 #include "stdio.h" /*包含输入输出文件*/ typedef int elemtype; typedef struct /*定义顺序表的结构*/ { elemtype vec[MAXSIZE]; /*顺序表数据成员所占据的存储空间*/ int last; /*顺序表中最后一个元素在数组中的下标(或向量中的位置)从0开始*/ }sequenlist; void listprint(sequenlist *L) /*输出线性表*/ { /*请在下面补充代码,输出顺序表*/ for(int i=0;i<=(*L).last;i++) printf("%d ",L->vec[i]); } int main() { sequenlist sl={{1,3,6,10,15,21,28,36,45},8};//直接给顺序表赋初值 listprint(&sl); return 0; }

    任务二:顺序表上的查找操作 相关知识: 需要掌握: 1.如何写完整函数定义 2.如何进行查找 函数定义 格式: 函数类型 函数名(形参列表) {…} 函数类型不为空时,函数要用return返回一个值。

    查找算法 采用顺序查找算法,从顺序表的一端开始,按顺序比较当前数组元素与给定值K是不是相等,若相等,则表示查找成功,返回元素在数组中的下标; 当比较完最后一个元素仍然不相等,则返回-1,表示查找失败。

    测试说明 平台会对你编写的代码进行测试:

    测试输入:45 预期输出: 查找成功,该元素在数组中的下标是9

    测试输入:30 预期输出: 查找失败 示例代码如下:

    #define MAXSIZE 100 #define OK 1 #define OVERFLOW -2 #include "stdio.h" typedef int elemtype; typedef struct {elemtype vec[MAXSIZE]; int last; }sequenlist; /*请在下面写出查找函数的原型。提示:根据主函数处的函数调用判断函数名、函数类型、参数类型*/ int locate(sequenlist *L, int key) { int i=0; int result=-1; L->vec[10]=key; while(i!=10) { if(L->vec[i]==key) { result=i; break; } i++; } return result; } void listprint(sequenlist *L) {int i; for(i=0;i<=(*L).last;i++) printf("%d ",L->vec[i]); } int main() { sequenlist sl={{1,3,6,10,15,21,28,36,45},8}; int key; int result; /*保存查找结果的变量*/ scanf("%d",&key); result=locate(&sl,key); if(result!=-1) printf("查找成功!该元素在数组中的下标是%d",result); else printf("查找失败!"); return 0; }

    任务三:顺序表的插入、删除操作 任务描述: 编写一个程序实现顺序表的插入删除操作。 相关知识: 需要掌握: 1.顺序表的插入操作 2.顺序表的删除

    顺序表的插入 insert(L,i,x) 在顺序表L的第i个位置上插入元素x 需要注意: 1、顺序表表满的情况 2、插入位置i的范围 0<i<=L->next+2(n+1) 3、L->last++

    顺序表的删除 dele(L,i) 删除顺序表L的第i个元素。 需要注意 1、删除位置i 0<i<=L->last+1 2、L->last–

    测试说明 平台会对你编写的代码进行测试: please input the insert position and insert value 3 44 the insert position: 3 insert value:44 i,e=0,1 i,e=1,2 i,e=2,44 i,e=3,3 i,e=4,4 i,e=5,5 i,e=6,6 i,e=7,7 i,e=8,8 i,e=9,9 i,e=10,10 please intput the delete position:5 i,e=0,1 i,e=1,2 i,e=2,44 i,e=3,3 i,e=4,5 i,e=5,6 i,e=6,7 i,e=7,8 i,e=8,9 i,e=9,10

    #define MAXSIZE 100 #define OK 1 #define OVERFLOW -2 #include "stdio.h" typedef int elemtype; typedef struct {elemtype vec[MAXSIZE]; int last; }sequenlist; /****************请写出插入函数定义******************************/ int insert(L,i,x) sequenlist *L; int i,x; { int j; if( ( (*L).last >= MAXSIZE-1)) { printf("overflow"); return 0; } /*表空间溢出*/ else if ( (i<=0) || ( i> (*L).last+1 )) { printf("error"); return 0; } else { for(j=(*L).last ; j>=i-1 ; j-- ) (*L).vec[j+1]=(*L).vec[j]; //结点后移 (*L).vec[i-1]=x; (*L).last=(*L).last+1;//终端结点下标加1 } return (1); } /*****************请写出删除函数定义*****************************/ int dele(L,i) sequenlist *L; int i; { int j; if ((i<0)||(i>(*L).last)) { return 0; } else { for (j=i;j<=(*L).last;j++) L->vec[j-1]=L->vec[j]; } L->last--; return (1); } void listprint(sequenlist *L) /*输出线性表*/ {int i; for(i=0;i<=(*L).last;i++) printf("i,e=%d,%d\n",i,L->vec[i]); } int main() { sequenlist sl={{1,2,3,4,5,6,7,8,9,10},9}; int i,j,x; elemtype e; printf("please input the insert position and insert value\n"); scanf("%d%d",&i,&x); printf("the insert position: %d\ninsert value:%d\n",i,x); insert(&sl,i,x); listprint(&sl); printf("please intput the delete position:\n"); scanf("%d",&j); dele(&sl,j);A listprint(&sl); return 0; }

    任务四: 任务描述:逆置一个顺序表并输出。 相关知识 需要掌握:1.如何逆置顺序表

    逆置顺序表 从两端开始,将顺序表对称元素交换。 设置两个对称的指针i,j; i=0; j=L->last; while(i<j) { 交换i,j下标处的元素; i++; j–; }

    测试说明 平台会对你编写的代码进行测试: 测试输入: 预期输出: 1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1

    #define MAXSIZE 100 #define OK 1 #define OVERFLOW -2 #include "stdio.h" typedef int elemtype; typedef struct {elemtype vec[MAXSIZE]; int last; }sequenlist; /*请在下面写出逆置函数的原型函数。*/ void inverse(sequenlist *L) { int i=0; for (i=0;i<= L-> last/2;i++) { L->vec[i]= L->vec[i]+L->vec[L->last-i]; L->vec[L->last-i]=L->vec[i]- L->vec[L->last-i]; L->vec[i]= L->vec[i]- L->vec[L->last-i]; } } void listprint(sequenlist *L) /*输出线性表*/ {int i; for(i=0; i<=(*L).last;i++) printf("%d ",L->vec[i]); printf("\n"); } int main() { sequenlist sl={{1,2,3,4,5,6,7,8,9,10},9}; int i,j,x; listprint(&sl); inverse(&sl); listprint(&sl); return 0; }

    任务五: 任务描述:有序顺序表中元素的插入 相关知识 需要掌握: 1.如何进行有序顺序表的插入

    先求出插入位置 i 为了保持有序性,插入位置不能随意指定。必须在指定位置进行插入 假设顺序表升序 插入元素为x 从表头开始(i=0),将L->vec[i]依次与x比较,如果x比表中元素大,则i++继续比较; 否则,找到插入位置 i ,跳出循环。

    实现在位置 i 处的插入操作 给定了插入位置和待插入元素,就是普通的插入操作

    编程要求: 实现有序顺序表中元素的插入

    测试说明 平台会对你编写的代码进行测试:

    测试输入:8 预期输出: 1 3 5 7 8 10

    测试输入:12 预期输出:1 3 5 7 10 12

    测试输入 0 预期输出:0 1 3 5 7 10

    #define MAXSIZE 100 #define OK 1 #define OVERFLOW -2 #include "stdio.h" typedef int elemtype; typedef struct {elemtype vec[MAXSIZE]; int last; }sequenlist; void order_insert(sequenlist *L,elemtype x) { int i=0,j; while(i<L->last+1 && x>=L->vec[i]) i++; for(j=L->last;j>=i-1;j--) L->vec[j+1]=L->vec[j]; L->vec[i]=x; L->last++; } void listprint(sequenlist *L) /*输出线性表*/ {int i; for(i=0;i<=(*L).last;i++) printf("%d ",L->vec[i]); } int main() { sequenlist sl={{1,3,5,7,10},4}; int x; scanf("%d",&x); order_insert(&sl,x); listprint(&sl); return 0; }

    我把我目前写的关于数据结构 题目 的链接全部汇总整理在下面,有需要的小伙伴自己点击哈。

    数据结构 习题 第一章 概论数据结构 习题 第二章 线性表 (C语言描述)数据结构 习题 第三章 栈和队列 (C语言描述)数据结构 习题 第四章 串 (C语言描述)数据结构 习题 第五章 多维数组和广义表(C语言描述)数据结构 习题 综合复习

    实验:

    数据结构 实验一 顺序表的操作数据结构 实验二 链表的基本操作数据结构 实验三 栈的基本运算数据结构 实验四 二叉树的操作数据结构实验五-马踏棋盘数据结构-顺序表的排序操作-冒泡排序

    关于顺序表的操作的实验内容就写到这了。 如果觉得内容对你有帮助的话,可以点个赞再走吗,Thanks♪(・ω・)ノ

    Processed: 0.011, SQL: 9