#include <stdio.h>
#include <stdlib.h>
typedef struct NODE{
int value;
struct NODE *fwd;
struct NODE *bwd;
} Node;
int dll_insert(Node *rootp,int value);
int remove(Node *rootp,Node *node);
int main(void)
{
Node *root;
Node *copy;
Node *copy1;
int i;
root = (Node *)malloc(sizeof(Node));
root->fwd = NULL;
root->bwd = NULL;
for(i = 0;i <= 8;i++)
dll_insert(root,i);
copy = root->bwd;
remove(root,copy);
copy1 = root->bwd;
while(copy1 != NULL)
{
printf("%d ",copy1->value);
copy1 = copy1->bwd;
}
system("pause");
return 0;
}
int dll_insert(Node *rootp,int value)
{
Node *newnode;
Node *current;
Node *pervious;
for(pervious = rootp;(current =pervious->fwd) != NULL;pervious = current)
{
if(current->value == value)
return 0;
if(current->value > value)
break;
}
newnode = (Node *)malloc(sizeof(Node));
if(newnode == NULL)
return 0;
newnode->value = value;
pervious->fwd = newnode;
newnode->fwd = current;
if(pervious != rootp)
newnode->bwd = pervious;
else
newnode->bwd = NULL;
if(current != NULL)
current->bwd = newnode;
else
rootp->bwd = newnode;
return 1;
}
int remove(Node *rootp,Node *node)
{
Node *pervious;
Node *current;
for(pervious = rootp;(current = pervious->fwd) !=NULL;pervious = current)
{
if(current == node)
break;
}
if(current == NULL)
return 0;
if(current->fwd != NULL)
{
if(pervious != rootp)
{
pervious->fwd = current->fwd;
current->fwd->bwd = pervious;
free(current);
}
else
{
pervious->fwd = current->fwd;
current->fwd->bwd = NULL;
free(current);
}
}
else
{
pervious->fwd = NULL;
rootp->bwd = pervious;
free(current);
}
return 1;
}
《c和指针》第十二章双链表练习
最新推荐文章于 2022-02-25 21:57:21 发布