#include<cstdio>
#include<cstdlib>
typedef struct DoubleLinkedList
{
int data;
struct DoubleLinkedList *pre;
struct DoubleLinkedList *next;
}DlinkedList_Node;
//建立链表
DlinkedList_Node* createDLink()
{
DlinkedList_Node *head,*p,*s;
int x;
head = (DlinkedList_Node*)malloc(sizeof(DlinkedList_Node));
p = head;
while(1)
{
printf("please input the data: \n");
scanf("%d",&x);
if(x != 65535)
{
s = (DlinkedList_Node*)malloc(sizeof(DlinkedList_Node));
s ->data = x;
s-> pre = p;
p->next = s;
p=s;
}
else
{
printf("\n数据输入结束\n");
break;
}
}
p->next = NULL;
head = head ->next;
head->pre = NULL;
return head;
}
//顺序、反序打印链表
void printDLink(DlinkedList_Node *head)
{
DlinkedList_Node *p,*s;
p = head;
printf("正序输出双向链表:\n");
while(p)
{
printf("%d ",p->data);
s = p;
p = p->next;
}
printf("\n 逆序输出双向链表: \n");
while(s)
{
printf("%d ",s->data);
s = s->pre;
}
printf("\n \n");
}
//删除一个结点
DlinkedList_Node* deleteDlinkedList_Node(DlinkedList_Node *head,int i)
{
DlinkedList_Node *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("没有找到想要删除的数据\n");
return head;
}
//插入一个结点
DlinkedList_Node* insertDlinkedList_Node(DlinkedList_Node *head,int i)
{
DlinkedList_Node *p,*temp;
p = head;
temp = (DlinkedList_Node*)malloc(sizeof(DlinkedList_Node));
temp ->data = i;
if(i < p->data)//比头结点数据小,插入到链表头部
{
head = temp;
head->next = p;//此处p为原来的head
head->pre = NULL;
p->pre = head;//此处p为原来的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; //遍历到链表尾部,p==NULL
temp ->pre = p;
temp ->next = NULL;
return head;
}
}
int main()
{
DlinkedList_Node *head;
head = createDLink();
printDLink(head);
head = insertDlinkedList_Node(head,1012);
head = deleteDlinkedList_Node(head,1991);
printDLink(head);
}
/*****************************
运行结果如下:
please input the data:
1991
please input the data:
1992
please input the data:
2013
please input the data:
2014
please input the data:
512
please input the data:
420
please input the data:
65535 数据输入结束
正序输出双向链表:
1991 1992 2013 2014 512 420
逆序输出双向链表:
420 512 2014 2013 1992 1991 正序输出双向链表:
1012 1992 2013 2014 512 420
逆序输出双向链表:
420 512 2014 2013 1992 1012 ******************************/

C语言实现双向链表删除节点、插入节点、双向输出等操作的更多相关文章

  1. javascript之DOM编程设置节点插入节点

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. dom操作------创建节点/插入节点

    <section> <div id="box" style="position: relative;"> <p id=" ...

  3. 【数据结构】27、红黑树,节点插入,修复平衡操作总结(针对jdk8中hashmap冲突过多链表转红黑树)

    二叉树节点插入 0.如果只有一个节点,那么就直接作为根,涂黑,如果父为黑,或者祖父为空,那么不做操作 1.叔叔节点不为空且为红 那么就修改父,叔叔,祖父节点颜色,最后把当前节点设置为祖父节点,在进行平 ...

  4. 用OC实现双向链表:构造链表、插入节点、删除节点、遍历节点

    一.介绍 双向链表:每一个节点前后指针域都和它的上一个节点互相指向,尾节点的next指向空,首节点的pre指向空. 二.使用 注:跟单链表差不多,简单写常用的.循环链表无法形象化打印,后面也暂不实现了 ...

  5. dom4j 间隔插入节点 处理复杂的xml文档

    前几周跟着老师做了一个小项目,个人主要负责xml文档处理,处理过程还是比较复杂的.此外这篇文章并不是讲基本的dom4j读写xml文档, 所以阅读此文的前提是你已经有了dom4j或jdom等处理xml文 ...

  6. (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作

    上午写了下单向循环链表的程序,今天下午我把双向链表的程序写完了.其实双向链表和单向链表也是有很多相似的地方的,听名字可以猜到,每个节点都包含两个指针,一个指针指向上一个节点,一个指针指向下一个节点.这 ...

  7. Query节点操作,jQuery插入节点,jQuery删除节点,jQuery Dom操作

    一.创建节点 var box = $('<div>节点</div>'); //创建一个节点,或者var box = "<div>节点</div> ...

  8. jQuery:节点(插入,复制,替换,删除)操作

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  9. jQuery节点操作,jQuery插入节点,jQuery删除节点,jQuery Dom操作

    一.创建节点 1 var box = $('<div>节点</div>'); //创建一个节点,或者var box = "<div>节点</div& ...

随机推荐

  1. The Promise of Deep Learning

    The Promise of Deep Learning By Yoshua Bengio Humans have long dreamed of creating machines that thi ...

  2. js template

    http://garann.github.io/template-chooser/ http://www.gbin1.com/technology/javascript/20120917-javasc ...

  3. Stanford Parser学习入门(2)-命令行运行

    在Stanford parser目录中已经定义了一部分命令行工具以及图形界面,本文将介绍如何在windows使用这些工具进行语法分析,Linux下也有shell可以使用. 关于如何搭建环境请参考上一篇 ...

  4. Spring 定时任务 quartz的配置

    环境:我用的是spring3.2,其中引入了quartz-1.5.2.jar 先写一个任务类: package com.hlcg.common.task; public class TestJob { ...

  5. 【网络流24题】No.19 负载平衡问题 (费用流)

    [题意] G 公司有 n 个沿铁路运输线环形排列的仓库, 每个仓库存储的货物数量不等. 如何用最少搬运量可以使 n 个仓库的库存数量相同.搬运货物时,只能在相邻的仓库之间搬运. 输入文件示例input ...

  6. [topcoder]NinePuzzle

    http://community.topcoder.com/stat?c=problem_statement&pm=11225&rd=14427 http://apps.topcode ...

  7. Ubuntu下安装Qt4.5(包括X86和ARM版本)

    条件:TQ2440开发板,虚拟机安装的Ubuntu10.04,安装好天嵌自带的GCC交叉编译器参考:http://blog.csdn.net/newnewman80/article/details/6 ...

  8. [置顶] Objective-C,/,ios,/iphone开发基础:分类(category,又称类别)

    在c++中我们可以多继承来实现代码复用和封装使程序更加简练.在objective-c中只能单继承,不能多继承,那么除了协议protocol之外,我们可以实现类似多继承的一个方法就是,分类(catego ...

  9. ES2015 (ES6)

    是时候使用ES 2015了 你可能不再需要Underscore BABEL Grunt 先 babel 再用 babel 后的文件 uglify 去掉严格模式.严格模式下全局的this转成了undef ...

  10. Docker在云环境中的应用实践初探:优势、局限性与效能评测

    作者 商之狄 发布于 2014年11月10日 本文依据笔者所在团队的一些近期开发和应用的实践,整理出一些有意义的信息,拿出来和社区分享.其中既包括在云端应用Docker与相关技术的讨论,同时也有实施过 ...