#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int n;
struct node *prev, *next;
}node_t;
node_t headnode, tailnode = {0, &headnode, NULL};
node_t *head = &headnode, *tail = &tailnode;
node_t *mk_node(int n)
{
node_t *p = malloc(sizeof(node_t));
if(p){
p->n = n;
p->prev = p->next = NULL;
}
return p;
}
void insert_head(int n)
{
node_t *newp = mk_node(n);
if(newp){
newp->prev = head;
newp->next = head->next;
head->next->prev = newp;
head->next = newp;
}
}
void insert_tail(int n)
{
node_t *newp = mk_node(n);
if(newp){
newp->prev = tail->prev;
newp->next = tail;
tail->prev->next = newp;
tail->prev = newp;
}
}
void insert_seq(int n)
{
node_t *newp = mk_node(n);
node_t *cur;
if(newp){
for(cur = head->next; cur != tail && cur->n < n; cur = cur->next)
;
newp->prev = cur->prev;
newp->next = cur;
cur->prev->next = newp;
cur->prev = newp;
}
}
node_t *del_node(int n)
{
node_t *del, *cur;
for(cur = head->next; cur != tail; cur = cur->next){
if(cur->n == n){
del = cur;
cur->prev->next = cur->next;
cur->next->prev = cur->prev;
del->prev = del->next = NULL;
return del;
}
}
return NULL;
}
void disp_node(void)
{
node_t *cur;
printf("disp...\n");
for(cur = head; cur != tail; cur = cur->next){
printf("%d\n", cur->n);
}
}
void destroy_linklist(void)
{
node_t *cur, *next;
printf("disp...\n");
for(cur = head->next; cur != tail; cur = next){
next = cur->next;
free(cur);
}
}
int main(void)
{
int n;
node_t *del;
headnode.next = &tailnode;
while(1){
scanf("%d", &n);
if(!n)
break;
insert_seq(n);
}
disp_node();
while((del = del_node(3))){
printf("del:%d\n", del->n);
free(del);
}
disp_node();
destroy_linklist();
return 0;
}
doublelinlist
最新推荐文章于 2024-07-22 22:17:09 发布