很急 求哪错了

死磕unity 2017-10-11 05:45:09
#include <stdio.h>
#include <malloc.h>
typedef char ElemType;
typedef struct LNode //定义单链表节点类型
{
ElemType data;
struct LNode *next;

}LinkList;
void InitList(LinkList *&L)
{
L = (LinkList *)malloc(sizeof(LinkList));
L->next = NULL;

}
void DestroyList(LinkList *&L)
{
LinkList *p = L, *q = p->next;
while (q != NULL)
{
free(p);
p = q;
q = p->next;
}
free(p);
}
int ListEmpty(LinkList *L)
{
return(L->next == NULL);
}
int ListLength(LinkList *L)
{
LinkList *p = L; int i = 0;
while (p->next != NULL)
{
i++;
p = p->next;
}
return (i);
}
void DispList(LinkList *L)
{
LinkList *p = L->next;
while (p != NULL)
{
printf("%c", p->data);
p = p->next;
}printf("\n");
}
int GetElem(LinkList *L, int i, ElemType &e)
{
int j = 0;
LinkList *p = L;
while (j<i && p != NULL)
{
j++;
p = p->next;
}
if (p == NULL)
return 0;
else
{
e = p->data;
return 1;
}
}
int LocateElem(LinkList *L, ElemType e)
{
LinkList *p = L->next;
int n = 1;
while (p != NULL && p->data != e)
{
p = p->next;
n++;
}
if (p == NULL)
return (0);
else
return (n);
}
int ListInsert(LinkList *&L, int i, ElemType e)
{
int j = 0;
LinkList *p = L, *s;
while (j<i - 1 && p != NULL)
{
j++;
p = p->next;
}
if (p == NULL) //未找到第i-1个节点
return 0;
else //找到第i-1个节点*p
{
s = (LinkList *)malloc(sizeof(LinkList));//创建新节点*s
s->data = e;
s->next = p->next; //将*s插入到*p之后
p->next = s;
return 1;
}
}
int ListDelete(LinkList *&L, int i, ElemType &e)
{
int j = 0;
LinkList *p = L, *q;
while (j<i - 1 && p != NULL)
{
int j = 0;
LinkList *p = L, *q;
while (j<i - 1 && p != NULL)
{
j++;
p = p->next;
}
if (p == NULL) //未找到第i-1个结点
return 0;
else //找到第i-1个结点*p
{
q = p->next; //q指向要删除的结点
if (q == NULL) return 0;
e = q->data;
p->next = q->next; //c从单链表中删除*q结点
free(q);//释放*q结点
return 0;
}
}
}
...全文
156 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-10-12
  • 打赏
  • 举报
回复
数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633
自信男孩 2017-10-12
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <malloc.h>

typedef  char ElemType;

typedef struct LNode      //定义单链表节点类型
{
    ElemType data;
    struct LNode *next;

}LinkList;

void InitList(LinkList *&L)
{
    L = (LinkList *)malloc(sizeof(LinkList));
    L->next = NULL;

}

void DestroyList(LinkList *&L)
{
    LinkList *p = L, *q = p->next;
    while (q)
    {
        free(p);
        p = q;
        q = p->next;
    }
    free(p);
}

int ListEmpty(LinkList *L)
{
    return(L->next == NULL);
}

int ListLength(LinkList *L)
{
    LinkList *p = L; int i = 0;
    while (p->next != NULL)
    {
        i++;
        p = p->next;
    }
    return (i);
}

void DispList(LinkList *L)
{
    LinkList  *p = L->next;
    while (p != NULL)
    {
        printf("%c", p->data);
        p = p->next;
    }
    printf("\n");
}

int GetElem(LinkList  *L, int i, ElemType  &e)
{
    int j = 0;
    LinkList  *p = L;
    while (j<i && p != NULL)
    {
        j++;
        p = p->next;
    }
    if (p == NULL)
        return 0;
    else
    {
        e = p->data;
        return 1;
    }
}
int LocateElem(LinkList *L, ElemType  e)
{
    LinkList *p = L->next;
    int n = 1;
    while (p != NULL && p->data != e)
    {
        p = p->next;
        n++;
    }
    if (p == NULL)
        return (0);
    else
        return (n);
}
int ListInsert(LinkList  *&L, int i, ElemType  e)
{
    int j = 0;
    LinkList *p = L, *s;
    while (j <i - 1 && p != NULL)
    {
        j++;
        p = p->next;
    }
    if (p == NULL)  //未找到第i-1个节点
        return 0;
    else        //找到第i-1个节点*p
    {
        s = (LinkList *)malloc(sizeof(LinkList));//创建新节点*s
        s->data = e;
        s->next = p->next; //将*s插入到*p之后
        p->next = s;
        return 1;
    }
}
int ListDelete(LinkList  *&L, int i, ElemType &e)
{
    int j = 0;
    LinkList *p = L, *q;

    int j = 0;
    LinkList *p = L, *q;
    while (j < i - 1 && p != NULL)
    {
        j++;
        p = p->next;
    }
    if (p == NULL)  //未找到第i-1个结点
        return 0;
    else
    {
        q = p->next;
        if (q == NULL)
            return 0;
        e = q->data;
        p->next = q->next;  //c从单链表中删除*q结点
        free(q);
        return 0;
    }

    return 0;
}

int main(void)
{
    return 0;
}
ListDelete函数有问题,循环应该是多了一层。建议对比一下你的代码;
北漂的牛犊 2017-10-11
  • 打赏
  • 举报
回复
具体说明什么问题,我们看代码才有针对性

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧