付翔的专栏
在鄙视中成长 记录成长的点滴
posts - 106,  comments - 32,  trackbacks - 0

中间因为指针的运用错误 而导致一系列问题 指针还需要在实战中加强理解
# ifndef dList
# define dList

/************************************************************************/
/* 实现双向链表 用结构来实现
                                                                     
*/


# define ENDSYMBOL 
-1 
//DListNode * head = NULL;
typedef struct _DListNode
{
    
struct _DListNode* pre;
    
struct _DListNode* next;
    
int data;
}DListNode;

int DListSize;
/*bool dList_malloc(int n)
{
    return (malloc(sizeof(DListNode)*n)!=NULL);
}
*/

void dlist_init(DListNode *& head)
{
    
//DListNode tail;//其他的没细看,你的DListNode tail;这里的tail是局部变量应该不行,函数返回后就成了野指针了。
    DListNode *tail = (struct _DListNode*)malloc(sizeof(struct _DListNode));
    
//*head = (struct _DListNode*)malloc(sizeof(struct _DListNode));
    (head)->next = tail;
    (head)
->pre = NULL;
    tail
->pre = head;
    tail
->next = NULL;
    DListSize 
= 1;

}
void dList_insert(int a,DListNode *& head)
{
    
struct _DListNode* node;
    node 
= (struct _DListNode*)malloc(sizeof(struct _DListNode));
    node 
->data = a;
    node 
->next = NULL;
    node 
->pre = NULL;
    
if(DListSize == 1)//if(*head == NULL)
    {
            
//struct _DListNode* temp;
        
//    temp = struct _DListNode*malloc(sizeof(struct _DListNode));
        
//    *head = node;
        
//    (*head) ->pre = NULL;
        
//    (*head) ->next = NULL;
        (head)->data = a;
        DListSize 
++;
    }
    
else if(DListSize == 2)
    {
        (head)
->next->data = a;
        DListSize 
++;
    }
    
else
    {
        
struct _DListNode* temp;
        node 
= (struct _DListNode*)malloc(sizeof(struct _DListNode));
        temp 
= head;
        
while(temp->data < a && temp->next!=NULL)
            temp
=temp->next;
        
/*node->next = temp->next;
        temp->next->pre = node;
        node->pre = temp;
        temp->next = node;
*/
        node
->next = temp->next;
        
if((temp)->next )
            temp
->next->pre = node;
        node
->pre = temp;
        temp
->next = node;
        node
->data = a;//之前没有加这个 代码运行结果有误 但是我之前已经赋值了

        DListSize 
++;
    }
}

bool dList_delete(int index, DListNode *& head)
{
    
if(index <=0 || index > DListSize)
        
return false;
    DListNode 
*temp;
    
int i ;
    temp 
= head;
    
if(index == 1)
    {
        head
->next->pre = NULL;
        head 
= head->next;
        free(temp);
        temp 
= NULL;
    }
    
else 
    {
        
for(i = 1; i < index ; i ++)
            temp 
= temp->next;
        temp
->next->pre = temp->pre;
        temp
->pre->next = temp->next;
    }
    
return true;
    
}
void dList_print(DListNode *& head)
{
    DListNode 
* node = (head);
    
while(node!=NULL)
    {
        printf(
"%d\t",node->data);
        node 
= node->next;
    }
}

# endif


posted on 2010-08-03 23:30 付翔 阅读(218) 评论(0)  编辑 收藏 引用 所属分类: linux 及 c相关

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理



<2011年2月>
303112345
6789101112
13141516171819
20212223242526
272812345
6789101112

常用链接

留言簿(2)

随笔分类

随笔档案

文章分类

文章档案

CSDN - 我的blog地址

博客

搜索

  •  

最新评论

阅读排行榜

评论排行榜