| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 619 人关注过本帖
标题:双向链表插入问题。。。
只看楼主 加入收藏
doing8
Rank: 1
等 级:新手上路
帖 子:20
专家分:3
注 册:2012-6-15
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:2 
双向链表插入问题。。。
目前只能实现 当链表为空的 时候 插入 。。。 不知道问题 出哪里了 求解





#include<stdio.h>
#include<malloc.h>

typedef struct list
{
    int value;
    struct list *fwd;
    struct list *bwd;
}LIST;

LIST *creat()
{
    LIST *head,*p1,*p2;
    head=(LIST *)malloc(sizeof(LIST ));
    scanf("%d",&head->value);
    if(head->value!=0)
    {
        head->fwd = NULL;
        head->bwd = NULL;
        p2=head;   
    }
    else
    {
        return NULL;
    }
    p1=(LIST *)malloc(sizeof(LIST ));
    scanf("%d",&p1->value);
    while(p1->value!=0)       // 输入为0的时候结束
    {
        p2->fwd=p1;
        p1->bwd=p2;        
        p2=p1;
        p1 = (LIST *)malloc(sizeof(LIST ));
        scanf("%d",&p1->value );
        
    }
    p2->fwd=NULL;   
    return head;
}

LIST *insert(LIST *head,int m)
{
    LIST *s,*p1,*p2,*p3;                    // s为待插入节点
   
    s = (LIST * )malloc(sizeof(LIST) );
    s->value=m;
    if(NULL == head)                        //链表为空直接插入
    {
        head = s ;
        s->bwd = NULL ;
        s->fwd = NULL ;
        return head;
    }
    p1=head;
    while(p1 != NULL && p1->value>s->value )      //判断移动 p2 记录 p1的位置
    {
        p2=p1 ;
        p1=p1->fwd ;
    }
    if(p1->value<=s->value)                     
    {
        if(head == p1)                           //插入头节点之后。。
        {
            p3 = (LIST * )malloc(sizeof(LIST) );   //在头结点后 建一个空节点 用于插入新节点
            p3->fwd=head;
            head=p3;
            head=s;
            s->fwd=p1;
            s->bwd=NULL;
            p1->bwd=s;
        }
        else                         // 在链表中部插入 。。。
        {
            p2->fwd = s;
            s->fwd = p1;
            s->bwd = p2;
            p1->bwd= s;   
        }
    }
    p1->fwd=s;                        //链表的 尾部插入
    s->bwd=p1;
    s->fwd=NULL;
    head->bwd=s;
   
    return head;
   
}


void print(LIST *head)
{
    if(head==NULL)
    {
        printf("list null\n");   
    }
    while(head!=NULL)
    {
        printf("%3d",head->value);
        head=head->fwd;
    }
}

void main()
{
    LIST * head;
    int m;
    printf("please input dlist record\n");
    head = creat();
    print(head);
    scanf("%d",&m);
    head=insert(head,m);
    print(head);
}
搜索更多相关主题的帖子: head include return 
2012-07-15 15:47
浅笑旭日殇
Rank: 1
等 级:新手上路
帖 子:11
专家分:5
注 册:2012-3-15
收藏
得分:5 
这个属于数据结构的,建议你贴到数据结构与算法里……
2012-07-15 17:12
netlin
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:24
帖 子:544
专家分:4308
注 册:2012-4-9
收藏
得分:5 
楼主,你的程序有些混乱,我给你修改了一下!

LIST *insert(LIST *head,int m){
    LIST *s,*p1,*p2,*p3;                    // s为待插入节点
    s = (LIST * )malloc(sizeof(LIST) );
    s->value=m;
    s->bwd = NULL ;
    s->fwd = NULL ;
   if(NULL == head) {                     //链表为空直接插入
       head = s ;
       return head;
    }
    p1=head;
    while(p1 != NULL && p1->value>s->value ){      //从大到小排序,查找s结点的插入位置。
        p2=p1;    //在p1指针往下移时,先记下它先前的位置,为后面连接结点s做准备。
        p1=p1->fwd ;
    }
    p2->fwd=s;
    s->bwd=p2;
    if(p1!=NULL){        //如果插入点后面还有链表,则接上来。
        s->fwd=p1;
        p1->bwd=s;
    }
    return head;
}

我这儿没有调试环境,楼主你试一下吧!

做自己喜欢的事!
2012-07-21 13:11
快速回复:双向链表插入问题。。。
数据加载中...
 
   



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

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