icoding测试代码--链表部分1&2

本代码适用于

icoding的数据结构并没有一个测试代码,其都是直接编写一个函数的形式,因此很难知道自己的实际输出是什么。针对部分题目,我编写了一系列测试代码以供大家进行数据输出的测试。

请先将你的代码复制

 
 
void lnk_del_x2y(LinkList L, ElemType mink, ElemType maxk) {//删除范围内结点
//TODO
}
int lnk_search(LinkList L, int k, ElemType* p_ele) {
    
//TODO
}

到函数中然后修改main函数完成测试样例的输入

在main代码中间有个修改提示,请按照提示操作修改即可

若仅需要对某一函数进行测试(只做某一题,可以在main函数进行相关修改)

main函数中一共有一个区域可以进行修改

关于头节点,没搞清楚icoding的评测机制,这里设置头节点且头节点的数据值为-256,打印链表时以head代替。

#include<stdio.h>
#include<stdbool.h>
#include<stdbool.h>
#include<stdlib.h>
#include<string.h>

#define MAXSIZE 100
#define ElemType int
struct _lnklist{
    ElemType data;
    struct _lnklist *next;
};
typedef struct _lnklist Node;
typedef struct _lnklist *LinkList;

void lnk_del_x2y(LinkList L, ElemType mink, ElemType maxk) {//删除范围内结点
//TODO
}
int lnk_search(LinkList L, int k, ElemType* p_ele) {
    
//TODO
}






//初始化链表
void init_list(LinkList *L)
{
    *L=(Node*)malloc(sizeof(Node));
    (*L)->next=NULL;
}
//打印链表
void print_list(LinkList L)
{
    Node *p=L->next;
    int i=0;
    while(p!=NULL)
    {
        if(i==0){
            printf("head-->");
            i++;
            p=p->next;
        }else{
        printf(" %d ",p->data);
        p=p->next;
        if(p) printf("-->");
        }
    }
    printf("\n");
}
//尾插法读入链表(含头节点)
void tail_insert(LinkList *L,ElemType elem[],int len)
{

    Node *p,*q;
    p=(Node*)malloc(sizeof(Node));
    p->data=-256;
    p->next=NULL;
    q=(*L);
    while(q->next!=NULL)
    {
        q=q->next;
    }
    q->next=p;
    q=q->next;
    for(int i=0;i<len;i++)
    {
        p=(Node*)malloc(sizeof(Node));
        p->data=elem[i];
        p->next=NULL;
        q->next=p;
        q=p;
    }
    //(*L)=(*L)->next;
}


int main(){
//--------以 下 内 容 可 以 修 改----------
    ElemType elem[]={0,1,1,2,3,4,5,6};
    //读入链表的数据,会自动转化为链表,必须为int


    //修改下方的true或false以控制程序是否运行
    bool no1=true;//删除指定范围节点,运行lnk_del_x2y函数(第一题)
    ElemType del1=2,del2=5;//可修改,第一题的删除范围

    bool no2=true;//删除重复,运行lnk_search函数(第二题)
    ElemType k_tr=3;//可修改,第二题的查找的位置(倒数第k个)

//--------以 上 内 容 可 以 修 改----------
    printf("--icoding--\n");
    printf("链表部分(1&2)\n");
    LinkList L;
    Node *head=L;
    
    
    int len=sizeof(elem)/sizeof(elem[0]);


    init_list(&L);
    tail_insert(&L,elem,len);
    printf(">>初始化链表\n");
    
    
    print_list(L);
    printf("将按照在main函数的设置运行相关函数,设置为false的不运行\n");
    printf("程序每次运行一个题均会重新初始化顺序表至最初状态\n\n");


    if(no1)
    {
        init_list(&L);
        tail_insert(&L,elem,len);

        if(del1>del2)
        {
            printf(">>删除范围错误,请重新输入\n");
        }
        else{
            
        printf(">>删除范围内结点,范围是(%d,%d)\n",del1,del2);

            for(int i=0;i<len-1;i++)
                {
                if(elem[i]>elem[i+1])
                {
                    printf("提示##链表不是递增链表,题目要求为递增链表,但不会影响测试\n");
                    break;
                }
                }
        lnk_del_x2y(L,del1,del2);
        print_list(L);
        }
        putchar('\n');
    }

    if(no2)
    {
        init_list(&L);
        tail_insert(&L,elem,len);
        printf(">>倒数查找,查找倒数第%d个\n",k_tr);
        ElemType elem_search;
        int re;
        print_list(L);
        re=lnk_search(L,k_tr+1,&elem_search);
        //icoding认为因为头节点不是节点,所以+1,即向前推了一个
        if(re==1)
        {
            if(&elem_search==NULL){
            printf("函数返回:%d , 查找成功!但函数未通过指针参数 p_ele 返回该结点 data 域的值,请修改您的代码!!!\n",re);
            }else{
            printf("函数返回:%d,找到元素为%d\n",re,elem_search);
            }
        }
        else{
             printf("函数返回:%d,未找到元素\n",re);
        }
    }


    

    printf("\n\n本程序仅输出结果,不判断结果正确与否\n----测试结束----\n");
    return 0;
}

若不改变main函数的内置测试样例,正确输出结果为

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

谨慎谦虚

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

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

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

打赏作者

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

抵扣说明:

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

余额充值