双向链表

来源:互联网 发布:360软件管理器下载 编辑:程序博客网 时间:2024/05/21 09:24
#include "two-way.h"#include <math.h>#include <stdlib.h>#include <string.h>NODE* head = NULL;//插入bool _insert(int index, const char* name){    NODE* p = (NODE*)malloc(sizeof(NODE));    memset(p, 0, sizeof(NODE));    p->index = index;    strcpy(p->name,name);    p->prev = NULL;    p->next = NULL;    if (head == NULL)    {        head = p;        return true;    }    if (head->index > p->index)    {        p->next = head;        head->prev = p;        head = p;        return  true;    }    for (NODE* node = head ; node !=NULL; node = node->next)    {        if (node->next == NULL)        {            node->next = p;            p->prev = node;            return  true;         }        if (p->index <node->next->index)        {               p->next = node->next;            node->next->prev = p;            node->next = p;            p->prev = node;             return  true;        }    }    return false;   }//修改bool _modify(int index, const char* name){       for (NODE* q = head;q != NULL; q = q->next)    {        if (q->index == index)        {            strcpy(q->name,name);            return true;        }    }    return false;}//删除bool _remove(const char*name){    NODE* p;    NODE* q = NULL;    for (p=head;p!=NULL;p=p->next)    {               if (p == head && (strcmp(p->name, name) == 0))        {            head = p->next;            free(p);            head->prev = NULL;            return true;        }           if (p->next == NULL&&(strcmp(p->name, name) == 0))        {                       p->prev->next = NULL;            free(p);            /*free(p);            p->next = NULL;*/            return true;        }        if (strcmp(p->name, name) == 0)        {                           //q = p;                        p->next->prev = p->prev;            p->prev->next = p->next;            free(p);            //p->prev->next = q;            return true;        }    }    return false;}//清空链表bool _clear(){    for (NODE* p = head; p != NULL;)    {        head = head->next;              free(p);        head->prev = NULL;        p = head;        if (head->next == NULL)        {            head = NULL;            free(p);            return true;        }    }                   }void show(){    for (NODE* p = head; p != NULL; p = p -> next)    {        printf("%d  %s\n",p->index,p->name);    }    printf("\n");}void main(){    _insert(7,"张三");     _insert(3,"李四");    _insert(8,"张晨");    _insert(4, "张四");    _insert(6,"李四");    _insert(1, "张晨");    show();    _modify(1,"王五");    show();     _remove("张三");    _remove("张晨");    show();    _clear();    show();    getchar();}
原创粉丝点击