实验一 顺序表的操作、插入与删除

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

}

相关文档
最新文档