[2022/2/25]希冀实验一 顺序表的删除
- 题目详情
编程实现把顺序表中从i个元素开始的k个元素删除(数据类型为整型)。
输入格式:第一行输入元素个数n,第二行输入n个数,空格分隔,第三行输入i和k;
输出格式:如果成功删除,则第一行输出Success!第二行输出删除后还剩下的顺序表中的元素;如果删除不成功,第一行输出Failure!第二行输出原顺序表元素。
输入样例:
8 1 4 6 8 9 2 11 15 3 4
输出:
Success! 1 4 11 15
- 题目主要步骤
1.定义顺序表
2.初始化顺序表
3.插入数据
4.删除数据
5.输出数据
为了实现以上步骤,我们需要写出以下函数
- 顺序表的定义
typedef int DateType;
//声明结构体list
typedef struct{
DateType data[100];//保存数据
int length;//保存表长度
}list;
Q1:为什么需要使用typedef int DateType?
用typedef来为类型起个别名,如“typedef long
INDEX;”。给long这样的类型起别名主要目的不是简化程序的书写,它有两个用处:一是表明该类型的特殊作用,二是将来有可能要改变这种类型(比如提高精度),如果直接声明为long型则失去了程序的可惟护性——每一个变量的声明都要改动;而声明为INDEX则使维护程序变得十分简单——只要改一下typedef语句即可。版权声明:本文为CSDN博主「iommer」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/iommer/article/details/89486493
- 顺序表的初始化
void init_list(list *a)
{
a->length = 0;
}
传递指针,方便修改顺序表的内容
Q2:为什么使用a->length而不能用a.length?
①若定义的结构体变量,则访问数据时用".";
②若定义的结构体指针,则访问数据时用"->";
在init_list中,传递的参数是指针,故使用->
- 顺序表的初始化
void init_list(list *a)
{
a->length = 0;
}
将长度设定为0,即没有数据
- 插入数据
void create_list(list *a, int n)
{
for(int i = 0;i<n;i++)
{
scanf("%d",&a->data[i]);
}
a->length = n;
}
利用scanf标准输入录入n次数据,并增加length的大小
- 删除数据
int delete_x(list *a,int x)
{
if( x > 0 && x < a->length)//判断数据合法性
{
for(int i = x; i < a->length;i++)
{
a->data[i-1] = a->data[i];
}
a->length --;
return 1;
}
return 0;
}
删除第x位的数据
- 主函数
int main()
{
list a;//定义一个顺序表a
int n = 0;//顺序表存储数字的个数
int x = 0; //需要删除的数字的起始位置
int y = 0;//共需要删除的数字的数量
init_list(&a);
scanf("%d",&n);
create_list(&a,n);
scanf("%d %d",&x,&y);
if(x+y <= a.length)
{
printf("Success!\n");
//删除y次位于x的数据
for(int i = 0; i < y; i++)
{
delete_x(&a,x);
}
for(int i = 0; i < a.length; i++)
{
printf("%d ",a.data[i]);
}
}
else
{
printf("Failure!\n");
for(int i = 0; i < n;i++)
{
printf("%d ",a.data[i]);
}
}
return 0;
}
- 源代码下载
顺序表删除.c
code by WWQ
如果您有其他问题,欢迎在评论区提出来
作者:贡献者