21级数据结构与算法实验1——顺序表

本文详细介绍了顺序表的建立、遍历、递增有序插入以及元素删除的C语言实现,并通过实例演示了如何在递增有序表中插入新元素和删除指定区间内的元素。此外,还涉及数组元素的循环右移操作。适合学习线性表和基本数据结构的学生和开发者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

7-1 顺序表的建立及遍历

分数 30

作者 陈晓梅

单位 广东外语外贸大学

读入n值及n个整数,建立顺序表并遍历输出。

输入格式:

读入n及n个整数

输出格式:

输出n个整数,以空格分隔(最后一个数的后面没有空格)。

输入样例:

在这里给出一组输入。例如:

4
-3 10 20 78

输出样例:

在这里给出相应的输出。例如:

-3 10 20 78

题解:

#include <stdio.h>
#define N 1000
typedef struct{
	int a[N];
	int length;
}sqlist; 
int main()
{
	sqlist l;
	int i;
	scanf("%d",&l.length);
	for(i=1;i<=l.length;i++)
	{
		scanf("%d",&l.a[i]);
	}
	for(i=1;i<=l.length;i++)
	{
		if(i!=l.length)
		{
			printf("%d ",l.a[i]);	
		}
		else{
			printf("%d",l.a[i]);
		}
	}
	return 0;
}

7-2 递增有序顺序表的插入

分数 10

 

实验目的:1、掌握线性表的基本知识 2、深入理解、掌握并灵活运用线性表。3、熟练掌握线性表的存储结构及主要运算的实现
已知顺序表L递增有序,将X插入到线性表的适当位置上,保证线性表有序。。

输入格式:

第1行输入顺序表长度,第2行输入递增有序的顺序表,第3行输入要插入的数据元素X。

输出格式:

对每一组输入,在一行中输出插入X后的递增的顺序表。

输入样例:

在这里给出一组输入。例如:

5
1 3 5 7 9
6

输出样例:

在这里给出相应的输出。例如:

1,3,5,6,7,9,

题解: 

#include <stdio.h>
#define N 1000
typedef struct{
	int a[N];
	int length;
}sqlist; 
int main()
{
	sqlist l;
	int x,i;
	scanf("%d",&l.length);
	for(i=1;i<=l.length;i++)
	{
		scanf("%d",&l.a[i]);
	}
	scanf("%d",&x);
	for(i=l.length;l.a[i]>=x;i--)
	{
		l.a[i+1]=l.a[i];
	}
	l.a[i+1]=x;
	l.length++;
	for(i=1;i<=l.length;i++)
	{
		printf("%d,",l.a[i]);
	}
	return 0;
}

 7-3 顺序表(删除)

分数 15

已知一组数据,采用顺序存储结构存储,其中所有的元素为整数。设计一个算法,删除元素值在[x,y]之间的所有元素

输入格式:

输入包含三行数据,第一行是表中元素个数,第二行是顺序表的各个元素,第三行是区间x和y。

输出格式:

删除元素值在[x,y]之间的所有元素后,输出新的顺序表。(最后无空格)

输入样例:

在这里给出一组输入。例如:

10
55 11 9 15 67 12 18 33 6 22
10 20

输出样例:

在这里给出相应的输出。例如:

55 9 67 33 6 22

题解:

#include <stdio.h>
int main()
{
	int i,j=0,len,x,y,length=0;
	scanf("%d",&len);
	int a[len],b[len];
	for(i=1;i<=len;i++)
	{
		scanf("%d",&a[i]);
	}
	scanf("%d %d",&x,&y);
	for(i=1;i<=len;i++){
		if(a[i]<x||a[i]>y)
		{
			b[++j]=a[i];
			length++;
		}
	}
	for(i=1;i<=length-1;i++)
	{
		printf("%d ",b[i]);
	}
	printf("%d",b[i]);
	return 0;
}

7-4 数组元素循环右移n位

分数 15

 

从键盘接收两个整数m和n,分别表示一维整型数组的元素个数,和要向移动的位数。已知0<m<=100,以及n>0。

在用户输入m和n后,第二行输入相应个数的数组元素。

程序要实现的功能是,让数组元素往右移动n位

例如,数组的5个元素是:1,2,3,4,5。

往右移动1位后:5,1,2,3,4

往右移动2位后:4,5,1,2,3

输入格式:

第一行输入两个整数,第二行输入数组元素。

输出格式:

移动后,数组的每一个元素,注意每个数组元素后有且仅有一个空格。

输入样例:

第一行的数据5和2,表示数组容量为5,让数组元素往右移动2个位置。

第二行是数组的每一个元素的值。

5 2
1 2 3 4 5 

输出样例:

输出移动后的数组元素值,注意每个元素后有且仅有一个空格。

4 5 1 2 3 

题解 :

#include <stdio.h>
int main()
{
	int n,i,m,temp;
	scanf("%d %d",&m,&n);
	int a[m];
	for(i=0;i<m;i++)
	{
		scanf("%d",&a[i]);
	}
	for(i=0;i<m;i++)
	{
		while(n>m)
		{
			n-=m;
		}
		temp=(m-n+i)%m;
		printf("%d ",a[temp]);
	}
	return 0;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定谔的代码丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值