概述
双向链表 操作函数原型声明
node_t * init();
//显示双向链表内容
void display(node_t *head);
//在双向链表中查找第I个节点存放的地址
node_t *find(node_t *head,int i);
//在双向链表中第I个节点后插入值为x的节点
node_t *insert(node_t *head,datatype x,int i);
//在双向链表中删除值为x的节点
node_t *delet(node_t *head,datatype x);
双向链表数据结构体
//双向链表
typedef int datatype;
typedef struct node
{
struct node *prev;
datatype info;
struct node *next;
}node_t;
完整代码
#include <stdio.h>
#include <malloc.h>
//双向链表
typedef int datatype;
typedef struct node
{
struct node *prev;
datatype info;
struct node *next;
}node_t;
node_t * init();
//显示双向链表内容
void display(node_t *head);
//在双向链表中查找第I个节点存放的地址
node_t *find(node_t *head,int i);
//在双向链表中第I个节点后插入值为x的节点
node_t *insert(node_t *head,datatype x,int i);
//在双向链表中删除值为x的节点
node_t *delet(node_t *head,datatype x);
node_t * init()
{
node_t *head = (node_t *)malloc(sizeof(node_t));
if(!head)
printf("create a node faill!n");
head->prev = NULL;
head->next = NULL;
return head;
}
//显示双向链表内容
void display(node_t *head)
{
node_t *p = head;
int count = 0;
printf("----- show list -----n");
while(p)
{
printf("%d : [%d]n",count,p->info);
count++;
p = p->next;
}
}
//在双向链表中查找第I个节点存放的地址
node_t *find(node_t *head,int i)
{
node_t *p = head;
int index = 0;
//if(i < 1)
// return NULL;
while(p && (index++ != i))
{
p = p->next;
}
if(!p)
{
printf("the list have no %d noden",i);
return NULL;
}
return p;
}
//在双向链表中第I个节点后插入值为x的节点
node_t *insert(node_t *head,datatype x,int i)
{
node_t *p = NULL;
/*
//第0个节点不存放数据
//插在第一个节点
if(i == 0)
{
node_t *pnew = (node_t *)malloc(sizeof(node_t));
if(!pnew)
{
printf("malloc err !n");
return NULL;
}
pnew->info = x;
pnew->next = p;
pnew->prev = p->prev;
p->prev->next = pnew;
p->prev = pnew;
}
*/
p = find(head,i);
if(p)
{
node_t *pnew = (node_t *)malloc(sizeof(node_t));
if(!pnew)
{
printf("malloc err !n");
return NULL;
}
pnew->info = x;
//当前P这个节点是最后一个节点
if(p->next == NULL)
{
pnew->next = NULL;
pnew->prev = p;
p->next = pnew;
return head;
}
//中间节点插入
pnew->next = p->next;
pnew->prev = p;
p->next->prev = pnew;
p->next = pnew;
return head;
}
else
{
printf("p is NULLn");
return NULL;
}
}
//在双向链表中删除值为x的节点
node_t *delet(node_t *head,datatype x)
{
node_t *p = head;
while(p && (p->info != x))
{
p = p->next;
}
if(!p)
{
printf("have no x noden");
}
else
{
p->prev->next = p->next;
p->next->prev = p->prev;
free(p);
p = NULL;
return head;
}
}
int main()
{
//双向链表测试
node_t *dlink_head = init();
insert(dlink_head,9,0);
insert(dlink_head,10,1);
insert(dlink_head,11,2);
insert(dlink_head,12,3);
insert(dlink_head,13,4);
insert(dlink_head,14,5);
display(dlink_head);
printf("delet 11n");
dlink_head = delet(dlink_head,11);
display(dlink_head);
printf("delet 13n");
dlink_head = delet(dlink_head,13);
display(dlink_head);
printf("insert 99 88n");
insert(dlink_head,99,2);
insert(dlink_head,88,1);
display(dlink_head);
}
运行结果
最后
以上就是可耐溪流为你收集整理的数据结构 双向链表 实现 纯代码的全部内容,希望文章能够帮你解决数据结构 双向链表 实现 纯代码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复