注册 登录
编程论坛 数据结构与算法

怎样在中间插入数据

发布于 2010-04-28 09:54, 493 次点击
数据结构 线性表链表问题:插入元素
求解````
/* 插入函数 */
int ListInsert (LinkList *L, ElemType Element)
{
    PtrToNode TmpCell = NULL;

    while (L->next && (L->next->Element.grade > Element.grade))
    {
        L = L->next;
    }

    TmpCell = (PtrToNode)malloc (sizeof (struct Node));
    if (!TmpCell)
    {
        return ERROR;
    }

    TmpCell->Element = Element;
    TmpCell->next = L->next;
    L->next = TmpCell;

    return OK;
}
1 回复
#2
2010-04-28 11:52
1.有些没看懂楼主的算法,不知道你链表里都设的什么变量,data域是Element还是grade?
2.L作为头结点一般不会随便移动,应该另设两个工作指针p、q来进行插入工作。头指针移动了的话,你的这个链表就再找不到了。
3.函数返回值不是int,返回值应该是LinkList型,并return L或者直接设为空类型,不加返回值。
4.形参里LinkList声明的是指针类型,应该把‘*’号去掉。

大致的函数如下:
void ListInsert (LinkList L, ElemType Element)
{
    LinkList TmpCell,p,q;
    p=L;q=L->next;
    while(q&&q->grade>Element) { p=p->next;q=q->next; }
    TmpCell=(LinkList)malloc(sizeof(LinkList));
    if(!TmpCell) { printf("Error");exit(0); }
    TmpCell->grade=Element;
    TmpCell->next =q;
    p->next=TmpCell;
}
1