我是靠谱客的博主 优美绿茶,最近开发中收集的这篇文章主要介绍双链表基本操作 doubly linked list,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述


#include<stdio.h>
#include<stdlib.h>
typedef struct doubleLink
{
int data;
struct doubleLink *pre;
struct doubleLink *next;
}dnode;
//建立链表

dnode* createDLink()
{
dnode *head,*p,*s;
int x;
head = (dnode*)malloc(sizeof(dnode));
p = head;
while(1)
{
printf("please input the data: ");
scanf("%d",&x);
if(x != 0)
{
s = (dnode*)malloc(sizeof(dnode));
s ->data = x;
s-> pre = p;
p->next = s;
p=s;
}
else
break;
}
p->next = NULL;
head = head ->next;
head->pre = NULL;
return head;
}
//顺序、反序打印链表

void printDLink(dnode *head)
{
dnode *p,*s;
p = head;
printf(" left to right: n");
while(p)
{
printf("%d
",p->data);
s = p;
//为了到达链表的末尾

p = p->next;
}
printf("n right to left: n");
while(s)
{
printf("%d
",s->data);
s = s->pre;
}
printf("n n");
}
//删除一个结点

dnode* deletedNode(dnode *head,int i)
{
dnode *p;
p = head;
if(p->data == i)
{
head = p->next;
head->pre = NULL;
free(p);
return head;
}
while(p)
{
if(p->data == i)
{
p->pre->next = p->next;
p->next->pre = p->pre;
free(p);
return head;
}
p = p->next;
}
printf("data not found n");
return head;
}
//插入一个结点

dnode* insertdNode(dnode *head,int i)
{
dnode *p,*temp;
p = head;
temp = (dnode*)malloc(sizeof(dnode));
temp ->data = i;
if(i < p->data)
{
head = temp;
head->next = p;
head->pre = NULL;
p->pre = head;
return head;
}
while(p != NULL && i > p->data)
{
p = p->next;
}
if(i < p->data)
{
temp ->next = p;
temp ->pre = p->pre;
p ->pre->next = temp;
p ->pre = temp;
return head;
}else
{
p->next = temp;
temp ->pre = p;
temp ->next = NULL;
return head;
}
}
int
main()
{
dnode *head;
head = createDLink();
printDLink(head);
head = insertdNode(head,4);
head = deletedNode(head,3);
printDLink(head);
return 0;
}

转载自http://blog.csdn.net/acm_jl/article/details/50949777

最后

以上就是优美绿茶为你收集整理的双链表基本操作 doubly linked list的全部内容,希望文章能够帮你解决双链表基本操作 doubly linked list所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部