#include <stdio.h>
#include <stdlib.h>
int n;
typedef struct node
{
int num;
int data;
struct node * next, * pre;
}node;
node * init(void);
void display(node * );
void dis(node *);
void insert(node * ,int ,int );
void del(node * , int );
int main(void)
{
node * head;
scanf("%d", &n);
head = init();
display(head);
insert(head, 4, 100);
display(head);
del(head, 2);
display(head);
dis(head);
return 0;
}
void del(node * head, int p)
{
node * current, * t;
current = head->next;
while(current->next->num != p)
current = current->next;
t = current->next;
current->next = t->next;
t->next->pre = current;
free(t);
current = current->next;
while(current->next != NULL)
{
current->num--;
current = current->next;
}
current->num--;
}
void insert(node * head, int p, int k)
{
node * current, * t, * newnode;
current = head->next;
while (current->next->num != p)
current = current->next;
t = current->next;
newnode = (node *)malloc(sizeof(node));
newnode->pre = current;
newnode->next = t;
newnode->num = t->num;
newnode->data = k;
current->next = newnode;
t->pre = newnode;
current = current->next->next;
while (current->next != NULL)
{
current->num++;
current = current->next;
}
current->num++;
}
node * init(void)
{
node * head, * current, *prev;
head = (node *)malloc(sizeof(node));
head->next = NULL;
prev = head;
for (int i = 1; i <= n; ++i)
{
current = (node *)malloc(sizeof(node));
prev->next = current;
current->num = i;
current->data = 10 - i;
current->pre = prev;
current->next = NULL;
prev = current;
}
return head;
}
void display(node * head)
{
node * current;
current = head->next;
while (current->next != NULL)
{
printf("%d ", current->num);
current = current->next;
}
printf("%d\n", current->num);
current = head->next;
while (current->next != NULL)
{
printf("%d ", current->data);
current = current->next;
}
printf("%d\n\n", current->data);
}
void dis(node * head)
{
node * current, * t;
current = head;
while ((t = current->next) != NULL)
{
free(current);
current = t;
}
free(current);
}
数据结构--双向链表
最新推荐文章于 2018-01-21 16:31:52 发布