#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();
}
双向链表
最新推荐文章于 2025-07-02 16:44:11 发布