| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 379 人关注过本帖
标题:双向链表插入错误,我真的已经认真思考过来
取消只看楼主 加入收藏
lmx07
Rank: 1
等 级:新手上路
帖 子:20
专家分:1
注 册:2009-6-3
结帖率:66.67%
收藏
已结贴  问题点数:2 回复次数:0 
双向链表插入错误,我真的已经认真思考过来
DuList.c.rar (217.5 KB)

运行时错误,插入不对
#include "ElemType.h"
#include "DuNode.h"
#include "stdlib.h"
#include "stdio.h"

DuLinkList Init(){
    DuLinkList L = ( DuLinkList ) malloc ( sizeof ( DuNode ) ) ;
    L -> data = 0 ;
    L -> next = L -> prior = NULL ;
    return L;
}
void Insert ( DuLinkList L , int i , ElemType e ) {
    DuLinkList s  , p = L->next ;
     int k ;
   
    if(i < 1 || i > GetLength( L )+1 )
    {
        printf( "插入数据位置错误\n" ) ; return ;
    }
   
    s = ( DuLinkList ) malloc ( sizeof ( DuNode ) ) ;
    s -> data = e ;

   for( k = 1 ; k < i ; k++)
   {                //找到插入的位置的后一个节点
       p = p -> next ;
   }
   s->prior = p ->prior ;
   p->prior->next = s;


   s->next = p;
   p->prior = s;
   
}


int  GetLength( DuLinkList L ){
    int k = 0 ;
    DuLinkList p = L ;
    while ( p->next )
    {
     k ++ ;
    }
    return k ;
   // return L -> data ;
}
void DeleteIndex ( DuLinkList L , int i ) {
   
    DuLinkList p = L , q = L ;
    int k = 0 ;

    if ( i< 1 || i > GetLength( L ) )
    {
    printf ( "删除数据位置错误 \n" ) ;
    }

    for( k = 1 ; k < i ; k++ ) //找到要删除的数据的前一个节点.
        p = p -> next ;

    q = p -> next ;

    p -> next = q -> next ;
    q -> next -> prior = p ;
    free ( q ) ;
    printf("\n删除%d位置的数据成功\n");
}

void DeleteElem ( DuLinkList L , ElemType e ){
    DuLinkList p = L ;
    int i = 0 ;
    while( p->next ){
        p = p -> next ;
        i ++ ;
        if( p -> data == e  )
        {
        DeleteIndex( L , i);
        }
    }


    }

void Traverse(DuLinkList L){ //正向遍历
    DuLinkList p = L ;
    printf ( " \n正向遍历数据 : \n" );
    while( p -> next )
    {
        p= p-> next ;
        printf ( " %d\t " , p -> data );
    }

}
void Display (DuLinkList L){ //反向遍历

    DuLinkList p = L ;
    printf ( "\n 反向遍历数据 : \n" );
    while( p -> next )
    {
        p = p -> next ;
    }

    while (p -> prior -> prior )
    {
        printf(" %d\t " , p->data ) ;
    }

}
搜索更多相关主题的帖子: 思考 链表 
2010-03-27 20:07
快速回复:双向链表插入错误,我真的已经认真思考过来
数据加载中...
 
   



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

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