感觉思路没错,但最后结果错了,求大神指点
#include<stdio.h>#include<malloc.h>
#include<windows.h>
#define False 0
#define Ok 1
#define Error 0
#define Infeasible -1
#define Overflow -2
typedef int status;
#define listinitsize 100
#define listincrement 10
typedef struct LNode{
int date;
struct LNode *next;
}*linklist;
// 基本操作
status initlist(linklist &L) //建立一个空链表
{
L=(linklist)malloc(sizeof(LNode));
L->next=NULL;
return Ok;
}
status listdelete(linklist &L,int i) //删除
{
int j;linklist p,q;
j=0;p=L;
while(p->next&&j<i-1)
{
p=p->next;j++;}
if(!p||j>i-1)return Error;
q=p->next;p=q->next;free(q);
return Ok;
}
status listinsert(linklist &L,int i,int e) //插入
{
int j;linklist p,q;
j=0;p=L;
while(p->next&&j<i-1)
{
p=p->next;j++;}
if(!(p->next)||j>i-1)return Error;
q=(linklist)malloc(sizeof(LNode));
q->date=e;q->next=p->next;
p->next=q;
return Ok;
}
status getlist(linklist L,int i,int &e) //查找
{
int j;linklist p;
j=0;p=L;
while(p->next&&j<i)
{
p=p->next;j++;}
if(!p||j>i-1)return Error;
e=p->date;
return Ok;
}
status listfull(linklist L) //顺序表判空
{
if(!(L->next==NULL)) exit(false);
else return Ok;
}
status putlist(linklist L) //打印顺序表中的所有元素
{
int i=1;int e;linklist p;p=L;
while(!(p->next==NULL))
{
getlist(L,i,e);
printf("%d ",e);
p=p->next;i++;
}
return Ok;
}
//基本应用
void deletelist(linklist &L,int mink,int maxk) //删除表中所有大于mink小于maxk的元素
{
int i=1;
while(L->next->date<maxk&&!(L->next==NULL))
{
if(L->date>mink)
listdelete(L,i);
else L=L->next;
}
}
status insertlist(linklist &L,int e) //将x插入顺序表的恰当位置,保持表的有序性
{
int i=1;linklist p;p=L;p=p->next;
if(p->date>e) listinsert(L,1,e);
while(p->next&&p->date<e)
{if(p->next->date>e)
{listinsert(L,i+1,e);return Ok;}
else {p=p->next;i++;}}
if(p->next==NULL)
listinsert(L,i+1,e);
return Ok;
}
void listnz(linklist &L) //将顺序表逆置
{
linklist p;p=L;
while(p->next)
p->next=p->next->next;
p->next->next=p;
}
void listhb(linklist LA,linklist LB,linklist &LC) //合并两个顺序表
{
LA=LA->next;LB=LB->next;
while(LA->next&&LB->next)
{
if(LA->date<LB->date)
{LC->next=LA;LC=LA;LA=LA->next;}
else if(LA->date==LB->date)
{
LC->next=LA;LC=LA;LA=LA->next;LB=LB->next;
}
else LC->next=LB;LC=LB;LB=LB->next;
}
while(LA->next==NULL) LC->next=LB;
while(LB->next==NULL) LC->next=LA;
}
void listjj(linklist LA,linklist LB,linklist &LC) //两表的交集
{
LA=LA->next;LB=LB->next;
while(LA->next&&LB->next)
{if(LA->date<LB->date) LA=LA->next;
else if(LA->date<LB->date) LB=LB->next;
else LC->next=LA;LC=LA;LA=LA->next;LB=LB->next;
}
}
status listdeletek(linklist &L,int i,int k) //删除第i个开始的k个元素
{
int j;
for(j=0;j<k;j++)
listdelete(L,i);
return 0;
}
//各个应用的操作测试
void main()
{
status initlist(linklist &L) ;
status listinsert(linklist &L,int i,int e) ;
status listdelete(linklist &L,int i) ;
status getlist(linklist L,int i,int &e) ;
status listfull(linklist L) ;
status putlist(linklist L) ;
void deletelist(linklist &L,int mink,int maxk) ;
status insertlist(linklist &L,int e) ;
void listnz(linklist &L) ;
void listhb(linklist LA,linklist LB,linklist &LC) ;
void listjj(linklist LA,linklist LB,linklist &LC);
status listdeletek(linklist &L,int k,int i);
linklist la,lb,lc,ld;
initlist(la);
initlist(lb);
initlist(lc);
initlist(ld);
listinsert(la,1,2);
listinsert(la,2,3);
listinsert(la,3,8);
listinsert(la,4,10);
listinsert(la,5,14);
listinsert(la,6,15);
listinsert(la,7,17);
listinsert(la,8,19);
listinsert(la,9,21);
listinsert(la,10,34);
listinsert(lb,1,1);
listinsert(lb,2,6);
listinsert(lb,3,7);
listinsert(lb,4,8);
listinsert(lb,5,9);
listinsert(lb,6,17);
listinsert(lb,7,19);
listinsert(lb,8,34);
listinsert(lb,9,44);
listinsert(lb,10,87); //输入表la,lb中的各个元素
printf("线性表la:");
putlist(la);printf("\n");
printf("线性表lb:");
putlist(lb);printf("\n");
printf("删除表lb中大于25小于54的数:\n");
deletelist(lb,22,55); //删除表lb中大于25小于54的数
putlist(lb);printf("\n");
printf("la和lb的并lc:\n");
listhb(la,lb,lc) ; //合并la,lb到lc
putlist(lc);printf("\n");
printf("la,lb的交集ld:\n");
listjj(la,lb,ld); //la,lb的交集ld
putlist(ld);printf("\n");
printf("逆置ld:\n");
listnz(ld); //逆置ld
putlist(ld);printf("\n");
printf("删除lc第4个开始的3个元素:\n");
listdeletek(lc,4,3); //删除lc第4个开始的3个元素
putlist(lc);printf("\n");
printf("将99插入la:\n");
insertlist(la,99);putlist(la); //将99插入la
printf("\n");
}