Day 52 香芹

#ifndef HEAD
#define HEAD
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct person {
char name[32];
char sex;
int age;
int score;
}DATATYPE;
typedef struct DulNode
{

   DATATYPE date;
   struct DulNode *prv;
   struct DulNode *next;

}DulNode;
typedef struct DulLink
{

    DulNode * head;
    int clen;

}DulLinkList;

extern DulLinkListCreateDulList();
extern int InsertHeadDouLinkList(DulLinkList * l,DATATYPE * data);
extern int ShowDulLinkList(DulLinkList * l,int dir);// 0 zheng 1 fan
extern int InsertPosDouLinkList(DulLinkList * l,DATATYPE * data,int pos);
extern DulNode
FindDulLinkList(DulLinkList * l,char* name);
extern int ModifyDulLinkList(DulLinkList * l,char* name,DATATYPE* data);
extern int DelDulLinkList(DulLinkList * l,char* name);
extern int InsertTailDouLinkList(DulLinkList * l,DATATYPE * data);

extern int DestroyLinkList(DulLinkList * l);
#endif // HEAD


#include “head.h”

int main(void)
{
DulLinkList* list = CreateDulList();
DATATYPE data[]={
{“zhangsan”,‘M’,22,80},
{“lisi”,‘F’,23,81},
{“wangmazi”,‘M’,24,82},
{“guanerge”,‘M’,54,88},
{“caocao”,‘M’,55,89},
};
InsertHeadDouLinkList(list,&data[0]);
InsertHeadDouLinkList(list,&data[1]);
InsertHeadDouLinkList(list,&data[2]);
ShowDulLinkList(list,0);
printf("---------------------------fan\n");
ShowDulLinkList(list,1);
printf("---------------------------pos\n");
/* InsertPosDouLinkList(list,&data[3],0);
ShowDulLinkList(list,0);
printf("---------------------------fan\n");
ShowDulLinkList(list,1);
printf("---------------------------find\n");*/

InsertTailDouLinkList(list,&data[3]);
ShowDulLinkList(list,0);
printf("---------------------------fan\n");
ShowDulLinkList(list,1);
printf("---------------------------find\n");
DelDulLinkList(list,"zhangsan");

DelDulLinkList(list,"lisi");

DelDulLinkList(list,"wangmazi");

DelDulLinkList(list,"guanerge");
  //ShowDulLinkList(list,1);

DestroyLinkList(list);
printf("---------------------------destory\n");

//ShowDulLinkList(list,0);

/* DulNode* f_node = FindDulLinkList(list,“zhangsan1”);
if(f_node)
{
printf(“find this guy…%s\n”,f_node->date.name);
}
else
{
printf(“can’t find this guy…\n”);
}
printf("---------------------------modify\n");
ModifyDulLinkList(list,“guanerge”,&data[4]);
ShowDulLinkList(list,0);
printf("---------------------------fan\n");
ShowDulLinkList(list,1);
printf("----------------------del\n");
DelDulLinkList(list,“lisi”);
ShowDulLinkList(list,0);
printf("---------------------------fan\n");
ShowDulLinkList(list,1);*/

printf("Hello World!\n");
return 0;

}


#include “head.h”

DulLinkList*CreateDulList()
{

    DulLinkList * temp = malloc(sizeof(DulLinkList));
    if(NULL == temp)
    {
        perror("create dul list malloc");
        return NULL;
    }
    temp->head = NULL;
    temp->clen = 0 ;
    return temp;

}

int InsertHeadDouLinkList(DulLinkList * l,DATATYPE * data)
{

    DulNode* newnode = malloc(sizeof(DulNode));
    if(NULL ==  newnode)
    {
        perror("InsertHeadDouLinkList malloc");
        return 1;
    }
    newnode->next = NULL;
    newnode->prv =NULL;
    memcpy(&newnode->date,data,sizeof(DATATYPE));
    if(NULL == l->head)
    {
        l->head = newnode;
    }
    else
    {
        newnode->next = l->head;
        l->head->prv = newnode;
        l->head = newnode;
    }
    l->clen++;
    return 0;

}

int ShowDulLinkList(DulLinkList * l,int dir)// 0 zheng 1 fan
{
DulNode* temp = l->head;
if(0 == dir)
{

    int i = 0 ;
    for(i = 0 ;i<l->clen;i++)
    {
        printf("%s:%d\n",temp->date.name,temp->date.score);
        temp= temp->next;
    }

}
else
{
    while(temp->next)
    {
        temp= temp->next;
    }

    while(temp)
    {
        printf("%s:%d\n",temp->date.name,temp->date.score);
        temp = temp->prv;
    }

}

return 0;

}
int InsertTailDouLinkList(DulLinkList * l,DATATYPE * data)
{

  DulNode * temp = l->head;
    while(temp->next)
    {
        temp =temp->next;
    }
    DulNode *newnode = malloc(sizeof(DulNode));
    if(NULL == newnode)
    {
        fprintf(stderr, "InsertTailDouLinkList malloc error\n");
        return 1;
    }
    memcpy(&newnode->date,data,sizeof(DATATYPE));
    temp->next = newnode;
    newnode->prv = temp;
    newnode->next = NULL;
    l->clen ++;

    return 0;

}
int InsertPosDouLinkList(DulLinkList * l,DATATYPE * data,int pos)
{

if(0 == pos)
{
    InsertHeadDouLinkList(l,data);
}
else if(pos == l->clen)
{
    InsertTailDouLinkList(l,data);
}
else
{
    DulNode* newnode =  malloc(sizeof(DulNode));
    if(NULL ==  newnode)
    {
        perror("InsertPosDouLinkList malloc");
        return 1;
    }
    memcpy(&newnode->date,data,sizeof(DATATYPE));
    newnode->next = NULL;
    newnode->prv = NULL;
    DulNode* temp = l->head;
    int i = 0 ;
    for(i = 0 ;i<pos;i++)
    {
        temp=temp->next;
    }
    newnode->next = temp;
    newnode->prv = temp->prv;
    temp->prv->next = newnode;
    temp->prv = newnode;
    l->clen++;
}

return 0;

}
DulNode* FindDulLinkList(DulLinkList * l,char* name)
{

int i = 0 ;
DulNode* temp = l->head;
for(i= 0 ;i<l->clen;i++)
{
    if(0 == strcmp(temp->date.name,name))
    {
        return temp;
    }
    temp= temp->next;//temp++;
}
return NULL;

}

int ModifyDulLinkList(DulLinkList * l,char* name,DATATYPE* data)
{

DulNode* temp =  FindDulLinkList(l,name);
if(temp)
{
    memcpy(&temp->date,data,sizeof(DATATYPE));
    return 0;
}
else
{
    fprintf(stderr,"ModifyDulLinkList node failure...\n");
    return 1;
}

}
//have bug is one dulnode ,
int DelDulLinkList(DulLinkList * l,char* name)
{

DulNode* temp = FindDulLinkList(l,name);
if(NULL == temp)
{
    fprintf(stderr,"DelDulLinkList failure... %s\n",name);
    return 1;
}
else
{

    if(temp == l->head)
    {
        //error code
        /*  l->head = temp->next;
            l->head->prv = NULL;
            free(temp);   */


        //modifi bug
        if(NULL== temp->next)
        {

            free(temp);
            l->head = NULL;

        }
        else
        {
            l->head = temp->next;
            l->head->prv = NULL;
            free(temp);
        }
    }
    else if(NULL==temp->next)
    {
        temp->prv->next = NULL;
        free(temp);


    }
    else
    {
        temp->next->prv = temp->prv;
        temp->prv->next = temp->next;
        free(temp);
    }
}
l->clen--;
return 0;

}

int DestroyLinkList(DulLinkList * l)
{

if(NULL == l->head)
{
    // fprintf(stderr, "not can Destroy");
    free(l);
}
else
{
    DulNode * temp = l->head;

    while(temp->next)
    {
        l->head = temp->next;

        temp = temp->next;
        free(temp->prv);
        temp->prv = NULL;
    }
    free(temp);
    l->head =NULL;
    free(l);
}
return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值