双链表:
/***********双链表**********/
#include <stdio.h>
#include <stdlib.h>
typedef struct Dnode //双链表数据结构
{
int data;
struct Dnode *prior,*next; //双链表的前驱节点和后继节点
}LinkList ;
LinkList *LinkList_Create(void) //创建双链表函数
{
int n;
LinkList *head,*end,*node;
head=(LinkList *)malloc(sizeof(LinkList));
head->prior=NULL;
end=head;
printf("请输入需要创建的双链表的大小:\n");
scanf("%d",&n);
printf("请依次输入%d个数值:\n",n);
while(n)
{
int data;
node=(LinkList *)malloc(sizeof(LinkList));
scanf("%d",&data);
node->data=data;
end->next=node;
node->prior=end;
end=node;
n--;
}
end->next=NULL;
return head;
}
void LinkList_Insert(LinkList *head) //双链表的尾插法
{
int data;
LinkList *node,*temp;
temp=head;
node=(LinkList *)malloc(sizeof(LinkList));
printf("请输入需要插入的数值:\n");
scanf("%d",&data);
node->data=data;
while(temp->next!=NULL)
{
temp=temp->next;
}
temp->next=node;
node->prior=temp;
temp=node;
temp->next=NULL;
}
LinkList *LinkList_Find(LinkList *head)
{
int data;
LinkList *node;
node=head;
printf("请输入需要查找的数值:\n");
scanf("%d",&data);
while(node->next!=NULL)
{
node=node->next;
if(node->data==data)
{
printf("查找成功\n");
return node;
}
}
printf("查找失败\n");
return NULL;
}
void LinkList_Change(LinkList *head) //修改双链表节点的数值
{
int data;
LinkList *node;
node=LinkList_Find(head);
printf("请输入需要修改的数值:\n");
scanf("%d",&data);
node->data=data;
printf("修改成功\n");
}
void LinkList_Delete(LinkList *head)
{
printf("双链表的删除操作\n");
LinkList *temp;
temp=LinkList_Find(head);
temp->prior->next=temp->next;
if(temp->next!=NULL)
{
temp->next->prior=temp->prior;
}
temp=NULL;
free(temp);
}
int main()
{
LinkList *start,*temp;
temp=start=LinkList_Create();
//LinkList_Insert(start);
//temp=LinkList_Find(start);
//printf("%d\n",temp->data);
//LinkList_Change(start);
LinkList_Delete(temp);
while(start->next!=NULL)
{
start=start->next;
printf("%d ",start->data);
}
return 0;
}
运行结果:
![](https://img-blog.csdnimg.cn/img_convert/8f4818925bf2c515447df64bf15f7791.png)