| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 691 人关注过本帖
标题:双向链表的插入操作。。。求大神帮忙操作
取消只看楼主 加入收藏
doing8
Rank: 1
等 级:新手上路
帖 子:20
专家分:3
注 册:2012-6-15
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:0 
双向链表的插入操作。。。求大神帮忙操作

目前只能在 链表为空的时候插入 小弟新手求大神们帮 看看


#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 17:31
快速回复:双向链表的插入操作。。。求大神帮忙操作
数据加载中...
 
   



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

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