编程题,希冀题型解析

  • 题目详情

编程实现把顺序表中从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


如果您有其他问题,欢迎在评论区提出来

This is just a placeholder img.