实验一 顺序表的操作、插入与删除
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一顺序表的操作、插入与删除
【实验目的】
(1)熟悉数据移动是顺序表的操作特点。
(2)掌握顺序表中元素的移动、插入和删除操作的特点。
【实验内容】
题1 设有一个用向量表示的线性表a[n],a[0]中不存放线性表的元素。要求写出将其中元素逆置的函数,并只允许用a[0]作附加的工作单元。
题2 写出从线性表中删除元素值为x的结点的函数。若该表中无此结点,则输出“无此结点”信息。
【实验要求】
从键盘任意输入9个整数,依次存放在数组a[10]的元素a[1]~a[9]中,逆置后输出。
在题1的基础上,从键盘输入一个整数x,从a[1]开始访问数组a,完成题2。
【实验提示】
题1 有以下两种方法:
(1)将a[1]至a[n-1]前移1位,再将a[n-1]←a[0];接着a[1]至a[n-2]前移一位,再将a[n-2]←a[0];……。
(2)可用移动和插入,通过a[0]使元素a[1]和a[n-1]交换;再使a[2]和a[n-2]交换;如此继续至中点为止。注意如何判断中点。
思考这两种方法的时间复杂度分别是多少。
题2 首先也要找到被删除元素的位置,然后将该位置以后的数据元素全部前移一个单元。注意:当数组a中有重复的元素值且x与此值相等时,函数应能删除全部重复元素。当有多个连续的相同值需要删除时,应都能删除。
程序如下:
#include
#include
/* run this program using the console pauser or add your own getch,
system("pause") or input loop */
int main(int argc, char *argv[]) {
int a[100]={0},i,x,j,k;
int n;
//输入数组
printf("请输入数组大小n:");
scanf("%d",&n);
printf("请输入%d个数:\n",n-1);
for (i=1;i scanf("%d",&a[i]); printf("\n"); for(i=1;i<=n/2;i++) { a[0]=a[i]; a[i]=a[n-i]; a[n-i]=a[0]; }//将a[i]与a[n-i]交换 printf("逆序输出:\n"); for(i=1;i { printf("%d ",a[i]); }//逆序输出n-1个整数 printf("\n输入一个数字并删除它:\n"); scanf("%d",&x); k=n; for(i=1;i while(a[i]==x) { for(j=i;j a[j]=a[j+1];//将删除位置后的数据元素全部前移一个单元 k=k-1;//顺序表的元素个数减一 }//有多个连续相同值也进行删除 if(k==n) printf("无此结点"); else { for(i=1;i { printf("%d ",a[i]); } } return 0; }