本代码适用于
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函数的内置测试样例,正确输出结果为