实验一 顺序表的操作
来源:互联网 发布:js中定义jso 编辑:程序博客网 时间:2024/06/14 04:04
实验一 顺序表的操作
一、实验目的
1.掌握线性表的顺序存储结构的表示和实现方法。
2.掌握顺序表基本操作的算法实现。
3.了解顺序表的应用。
二、实验内容
1.建立顺序表,并在顺序表上实现插入、删除和查找等基本操作。
2.删除有序顺序表中的重复元素。
三、实验要求
1.建立顺序表并实现相关基本操作。
(1)根据输入顺序表的长度n和各个数据元素值建立一个顺序表,并输出顺序表中各元素值,观察输入的内容与输出的内容是否一致。
(2)在顺序表的第i个元素之前插入一个值为x的元素,并输出插入后的顺序表中各元素值。
(3)删除顺序表中第i个元素,并输出删除后的顺序表中各元素值。
(4)在顺序表中查找第i个元素,如果查找成功,则显示“查找成功”和该元素在顺序表中的位置,否则显示“查找失败”。
2.删除有序顺序表中的重复元素。
(1)根据输入的n个非递减的有序数据建立一个有序顺序表,并输出有序顺序表中各元素值。
(2)删除有序顺序表中所有的重复元素,并显示删除后的有序顺序表中各元素值。
四、详细程序清单
#include<stdio.h>#define MAXLEN 30typedef struct{ int elem[MAXLEN]; int length;}Sqlist;void Create(Sqlist &L)//创建{ int n,i=0; printf("请输入线性表元素个数(小于30)\n"); while(scanf("%d",&n)&&n>30||n<0) { printf("数据不合法,请重新输入\n"); } printf("请输入%d个数,用空格分开\n",n); while(n--) { scanf("%d",&L.elem[i]); i++; L.length++; } }void Show(Sqlist L)//显示{ printf("当前顺序表中元素有:\t"); for(int i=0;i<L.length;i++) { printf("%d ",L.elem[i]); } printf("\n");}int Insert(Sqlist &L,int i,int x)//插入{ int key=1; if (i<1||i>L.length+1) { printf("插入位置不正确\n"); key=0; return key; } for(int j=L.length-1;j>=i-1;j--) L.elem[j+1]=L.elem[j]; L.elem[i-1]=x; L.length++; return key;}int Delete(Sqlist &L,int i)//删除{ int key=1; if (i<1||i>L.length) { printf("删除位置不正确\n"); key=0; return key; } for(int j=i;j<=L.length-1;j++) L.elem[j-1]=L.elem[j]; L.length--; return key; }int Search(Sqlist L,int e)//查找 { int i,key=1; for (i=0;i<L.length&&L.elem[i]!=e;i++); if (i<L.length) { printf("查找成功,%d在",e); for(;i<L.length;++i) if(e==L.elem[i]) printf("第%d",i+1); printf("的位置\n"); return key; } else {printf("查找失败\n"); key=0;return key;}}void DelSqlist(Sqlist &L)//去重 { int i,j,temp; for (j=0;j<L.length;j++) for (i=0;i<L.length-1-j;i++) { if(L.elem[i]>L.elem[i+1]) { temp=L.elem[i]; L.elem[i]=L.elem[i+1]; L.elem[i+1]=temp; } } i=0; while(i<L.length-1) if (L.elem[i]==L.elem[i+1]) { for (j=i+1;j<L.length;j++) L.elem[j-1]=L.elem[j]; L.length--; } else i++;}int main() { int i,x,e,slect,key; Sqlist L; L.length=0; Create(L); Show(L); printf("请选择操作:\t 1.插入元素\t2.删除元素\t3.查找元素\t4.删除重复元素\n"); while(~scanf("%d",&slect)) { key=0; switch (slect) { case 1:if (L.length>=MAXLEN) { printf("顺序表中已放满元素,无法插入新元素\n"); break;} while(key==0){ printf("请输入要插到的位置和元素值\n"); scanf("%d%d",&i,&x); key=Insert(L,i,x); Show(L); }break; case 2:while(key==0){ printf("请输入要删除的位置\n"); scanf("%d",&i); key=Delete(L,i); Show(L); }break; case 3: while(key==0){ printf("请输入要查找的元素\n"); scanf("%d",&e); key=Search(L,e); }break; case 4:DelSqlist(L);Show(L);break; default:printf("输入错误,请重新输入\n"); break; } printf("请选择操作:\t 1.插入\t2.删除\t3.查找\t4.删除重复元素\n"); } }
五、程序运行结果
六、实验心得体会
1.考虑问题要全面,尽可能增强程序的鲁棒性;
2.将程序模块化,能使其更加可读、易找错、易修改;
3.函数和变量的命名要能一眼看出来它的意思;
4.错误很多,调试很烦,要有耐心。
阅读全文
0 0
- [实验一] 顺序表的基本操作
- 实验一 顺序表的操作
- 实验一顺序表的建立与操作
- 实验一:顺序表
- 实验一:顺序表
- 实验一:顺序表的实现
- 实验一顺序表的实现
- 实验一顺序表的实现
- 实验一:数据结构顺序表的建立
- 实验一:线性表实验-顺序表的实现
- 数据结构实验一 线性表的顺序存储实验
- 数据结构实验--顺序表操作
- 实验一 顺序表实现
- 实验一:顺序表实验报告
- 南邮数据结构实验1.1 顺序表的操作
- 数据结构实验1_顺序表的操作
- 顺序表的基本操作实现及其应用(实验1)
- 实验一 线性表的基本操作
- Mybatis学习(05)-mapper代理方法开发dao && 输入映射和输出映射
- 数据结构实验之栈与队列十:走迷宫
- UOJ#6 NOI-2014 随机数生成器
- 【基础算法】有重复元素的全排列问题
- 时间格式转换
- 实验一 顺序表的操作
- 导致数据中心运行成本增加的5个原因
- 【CTSC1999】 CODE[VS] 2218 补丁VS错误(状压最短路)
- 两数交换三种方法:指针,加减法与位运算
- poj1741树的分治
- leetcode 492. Construct the Rectangle(C语言,开方)42
- Qt学习: 鼠标事件总结(转)
- Netty学习笔记--第一天
- 一般在使用RecyclerView、Picasso、OKHttps和拦截器所用到的依赖等很多依赖