标题:感觉思路没错,但最后结果错了,求大神指点
只看楼主
LiuFuMinH
Rank: 2
等 级:论坛游民
帖 子:12
专家分:45
注 册:2013-10-27
结帖率:100%
已结贴  问题点数:20 回复次数:1 
感觉思路没错,但最后结果错了,求大神指点
#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");
}
搜索更多相关主题的帖子: include return status False 
2013-10-27 16:30
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6809
专家分:42393
注 册:2010-12-16
得分:20 
感觉思路没错,但最后结果错了

哥哥,别人怎么知道你的思路是什么,你期待的结果是什么

我行我乐
我的博客:
http://blog.yuccn. net
2013-10-28 12:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-422609-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028735 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved