鱼C论坛

 找回密码
 立即注册
查看: 2370|回复: 2

有谁能看看这错哪了么

[复制链接]
发表于 2018-6-4 23:30:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 漫珠沙华 于 2018-6-5 09:55 编辑
[code][code][code]#include <stdio.h>
#include<malloc.h>
#include "linklist.cpp"  
typedef struct node
{
        int data;
        struct node *next;
}Linknode;

void Move(Linknode*&L)
{
        Linknode *p=L->next,*pre=L;
        while (p!=NULL && p->data<0)
        {
                pre=p;
                p=pre->next;
        }
        while (p!=NULL)
        {
                if(p->data<0)
                {
                        pre->next=p->next;
                        p->next=L->next;
                        L->next=p;
                        p=pre->next;
                        
                }
                else
                {
                        pre=p;
                        p=p->next;
                }
        }
 } 
 int main()
 {
         LinkNode *L;
        int a[] ={
                1,-3,56,23,-4,-12,32,33,0,0
        };
        CreateListR(L,a,10);
        printf("L:"); DispList(L);
        Move(L);
        printf("L:"); DispList(L);
        
 }
[/code][/code][/code]
//单链表基本运算算法
#include <stdio.h>
#include <malloc.h>
typedef int ElemType;
typedef struct LNode  
{
        ElemType data;
        struct LNode *next;                //指向后继结点
} LinkNode;                                        //声明单链表结点类型
void CreateListF(LinkNode *&L,ElemType a[],int n)
//头插法建立单链表
{
        LinkNode *s;
        L=(LinkNode *)malloc(sizeof(LinkNode));          //创建头结点
        L->next=NULL;
        for (int i=0;i<n;i++)
        {        
                s=(LinkNode *)malloc(sizeof(LinkNode));//创建新结点s
                s->data=a[i];
                s->next=L->next;                        //将结点s插在原开始结点之前,头结点之后
                L->next=s;
        }
}
void CreateListR(LinkNode *&L,ElemType a[],int n)
//尾插法建立单链表
{
        LinkNode *s,*r;
        L=(LinkNode *)malloc(sizeof(LinkNode));          //创建头结点
        L->next=NULL;
        r=L;                                        //r始终指向终端结点,开始时指向头结点
        for (int i=0;i<n;i++)
        {        
                s=(LinkNode *)malloc(sizeof(LinkNode));//创建新结点s
                s->data=a[i];
                r->next=s;                        //将结点s插入结点r之后
                r=s;
        }
        r->next=NULL;                        //终端结点next域置为NULL
}
void InitList(LinkNode *&L)
{
        L=(LinkNode *)malloc(sizeof(LinkNode));          //创建头结点
        L->next=NULL;
}
void DestroyList(LinkNode *&L)
{
        LinkNode *pre=L,*p=pre->next;
        while (p!=NULL)
        {        free(pre);
                pre=p;
                p=pre->next;
        }
        free(pre);        //此时p为NULL,pre指向尾结点,释放它
}
bool ListEmpty(LinkNode *L)
{
        return(L->next==NULL);
}
int ListLength(LinkNode *L)
{
        LinkNode *p=L;int i=0;
        while (p->next!=NULL)
        {        i++;
                p=p->next;
        }
        return(i);
}
void DispList(LinkNode *L)
{
        LinkNode *p=L->next;
        while (p!=NULL)
        {        printf("%d ",p->data);
                p=p->next;
        }
        printf("\n");
}
bool GetElem(LinkNode *L,int i,ElemType &e)
{
        int j=0;
        LinkNode *p=L;
        if (i<=0) return false;                //i错误返回假
        while (j<i && p!=NULL)
        {        j++;
                p=p->next;
        }
        if (p==NULL)                                //不存在第i个数据结点
                return false;
        else                                                //存在第i个数据结点
        {        e=p->data;
                return true;
        }
}
int LocateElem(LinkNode *L,ElemType e)
{
        LinkNode *p=L->next;
        int n=1;
        while (p!=NULL && p->data!=e)
        {        p=p->next;
                n++;
        }
        if (p==NULL)
                return(0);
        else
                return(n);
}
bool ListInsert(LinkNode *&L,int i,ElemType e)
{
        int j=0;
        LinkNode *p=L,*s;
        if (i<=0) return false;                        //i错误返回假
        while (j<i-1 && p!=NULL)                //查找第i-1个结点p
        {        j++;
                p=p->next;
        }
        if (p==NULL)                                        //未找到位序为i-1的结点
                return false;
        else                                                        //找到位序为i-1的结点*p
        {        s=(LinkNode *)malloc(sizeof(LinkNode));//创建新结点*s
                s->data=e;
                s->next=p->next;                        //将s结点插入到结点p之后
                p->next=s;
                return true;
        }
}
bool ListDelete(LinkNode *&L,int i,ElemType &e)
{
        int j=0;
        LinkNode *p=L,*q;
        if (i<=0) return false;                //i错误返回假
        while (j<i-1 && p!=NULL)        //查找第i-1个结点
        {        j++;
                p=p->next;
        }
        if (p==NULL)                                //未找到位序为i-1的结点
                return false;
        else                                                //找到位序为i-1的结点p
        {        q=p->next;                                //q指向要删除的结点
                if (q==NULL) 
                        return false;                //若不存在第i个结点,返回false
                e=q->data;
                p->next=q->next;                //从单链表中删除q结点
                free(q);                                //释放q结点
                return true;
        }
}

看第一段代码(函数调用出了问题,不知道怎么改)
D{{N]TZXKN4}J_(U}95LW$C.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-5 08:36:11 | 显示全部楼层

回帖奖励 +1 鱼币

为什么形参要用 *&这种形式,而不用**?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-5 10:00:34 | 显示全部楼层
我已经解决了,把前面的Linknode定义删掉,下面的Linknode改为LinkNode就好了,它跟linklist.cpp文件里的LinkNode冲突了

*&是指针的引用,OK的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-29 22:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表