#include<stdio.h>
#include"stdlib.h" struct student
{
int data;
struct student *pnext;
};
struct students
{
struct students *prev;
int data;
struct students *pnext;
};
struct student *create(int dat); //单链表创造一个节点。
struct students *shuangcreate(int dat); //双链表创造一个节点。 void insert_head(struct student* pH,struct student* news);//单链表头插入
void insert_head_shuang(struct students* pH,struct students* news);//双链表头插入
void insert_tail_shuang(struct students* pH,struct students* news);//尾插入
int main()
{
struct student *ph=create();
struct students *phs=shuangcreate(); insert_head(ph,create());
insert_head(ph,create()); insert_head_shuang(phs,shuangcreate());
insert_head_shuang(phs,shuangcreate());
insert_head_shuang(phs,shuangcreate()); /*
insert_tail_shuang(phs,shuangcreate(1)); //尾插入
insert_tail_shuang(phs,shuangcreate(2)); printf("%d.\n",ph->data);
printf("%d.\n",ph->pnext->data);
printf("%d.\n",ph->pnext->pnext->data);
*/
printf("%d.\n",phs->data);
printf("%d.\n",phs->pnext->data);
printf("%d.\n",phs->pnext->pnext->data);
printf("%d.\n",phs->pnext->pnext->pnext->data); return ;
} struct student *create(int dat) //单链表创造一个节点。
{
struct student *p=(struct student*)malloc(sizeof(struct student));
if(NULL==p)
{
return NULL;
printf("节点分配失败");
}
p->data=dat;
p->pnext=NULL;
return p;
} struct students *shuangcreate(int dat) //双链表创造一个节点。
{
struct students *p=(struct students*)malloc(sizeof(struct students));
if(NULL==p)
{
return NULL;
printf("双链表节点分配失败");
}
p->data=dat;
p->pnext=NULL;
p->prev=NULL;
return p;
}
void insert_head(struct student* pH,struct student* news)
{
news->pnext=pH->pnext;
pH->pnext=news;
}
void insert_tail_shuang(struct students* pH,struct students* news) //双链表的尾插入
{
struct students* ph=pH;
while(NULL!=ph->pnext)
{
ph=ph->pnext;
printf("a\n");
}
ph->pnext=news;
news->prev=ph;
}
//画出双链表的节点链接情况
void insert_head_shuang(struct students* pH,struct students* news) //双链表的头插入
{
struct students* p=pH;
news->pnext=p->pnext;
if(p->pnext!=NULL) //考虑到只有一个头结点的情况。这里很重要 当第一次的时候p->pnext=NULL;
p->pnext->prev=news;
p->pnext=news;
news->prev=p;
}

接下来将会补齐单链表和双链表节点的 遍历 、逆序、和 删除 ;暂且放到这里,

单链表&双链表的头插入&尾插入的更多相关文章

  1. C# 数据结构 - 单链表 双链表 环形链表

    链表特点(单链表 双链表) 优点:插入和删除非常快.因为单链表只需要修改Next指向的节点,双链表只需要指向Next和Prev的节点就可以完成插入和删除操作. 缺点:当需要查找某一个节点的时候就需要一 ...

  2. 数据结构与算法之PHP实现链表类(单链表/双链表/循环链表)

    链表是由一组节点组成的集合.每个节点都使用一个对象的引用指向它的后继.指向另一个节点的引用叫做链表. 链表分为单链表.双链表.循环链表.   一.单链表 插入:链表中插入一个节点的效率很高.向链表中插 ...

  3. C#数据结构与算法系列(六):链表——双链表(Double-LinkedList)

    1.对比单向链表 单向链表查找的方向只能是一个方向,而双向链表可以向前或者向后查找 单向链表不能自我删除,需要靠辅助节点,而双向链表可以自我删除 对于单向链表的删除,我们首先要找到单向链表待删除节点的 ...

  4. Python与数据结构[0] -> 链表/LinkedList[1] -> 双链表与循环双链表的 Python 实现

    双链表 / Doubly Linked List 目录 双链表 循环双链表 1 双链表 双链表和单链表的不同之处在于,双链表需要多增加一个域(C语言),即在Python中需要多增加一个属性,用于存储指 ...

  5. 双链表的基本实现与讲解(C++描述)

    双链表 双链表的意义 单链表相对于顺序表,确实在某些场景下解决了一些重要的问题,例如在需要插入或者删除大量元素的时候,它并不需要像顺序表一样移动很多元素,只需要修改指针的指向就可以了,其时间复杂度为 ...

  6. 新秀nginx源代码分析数据结构篇(两) 双链表ngx_queue_t

    nginx源代码分析数据结构篇(两) 双链表ngx_queue_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn. ...

  7. JAVA 链表操作:单链表和双链表

    主要讲述几点: 一.链表的简介 二.链表实现原理和必要性 三.单链表示例 四.双链表示例 一.链表的简介 链表是一种比较常用的数据结构,链表虽然保存比较复杂,但是在查询时候比较便捷,在多种计算机语言都 ...

  8. 数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现

    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...

  9. 【Weiss】【第03章】练习3.3:通过交换指针交换单/双链表元素

    [练习3.3] 通过之调整指针(而不是数据)来交换两个相邻的元素,使用 a.单链表 b.双链表 Answer: 先放测试代码,折叠标题可以看到分别是哪种链表的测试. 实测可满足题意,但单链表和双链表的 ...

随机推荐

  1. vue 中引用jquery

    1.安装jquery npm install jquery --save-dev 2.打开配置文件webpack.base.conf.js 加入'jquery': path.resolve(__dir ...

  2. arcgis api 3.x for js 入门开发系列十一地图统计图(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  3. ios手机录屏软件哪个好

    苹果手机中的airplay镜像,是苹果手机系统的一大特色,可以轻松把手机屏幕投射电脑,这个功能使苹果手机相较安卓手机投屏会更加轻松,那么如何实现苹果手机投射电脑屏幕?下面小编便来分享ios手机录屏软件 ...

  4. C#1到C#4使用委托的几种方式

    using System; namespace DelegateDemo { class Program { private delegate int Cacu(string str); static ...

  5. Vue2.5笔记:Vue的实例与生命周期

    理解与认识 Vue 的实例是我们学习 Vue 非常重要的一步,也是非常必须的,因为实例是它的一个起点,也是它的一个入口,只有我们创建一个 Vue 实例之后,我们才行利用它进行一些列的操作. 首先 Vu ...

  6. Hadoop Yarn框架详细解析

    在说Hadoop Yarn之前,我们先来看看Yarn是怎样出现的.在古老的Hadoop1.0中,MapReduce的JobTracker负责了太多的工作,包括资源调度,管理众多的TaskTracker ...

  7. httpservlet里单纯分页

    @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletExcep ...

  8. Session session = connection.createSession(paramA,paramB);参数解析

    Session session = connection.createSession(paramA,paramB); paramA是设置事务,paramB是设置acknowledgment mode ...

  9. SSIS的部署和配置

    参考:http://www.cnblogs.com/JasonLiao/p/SSISDeploy.htmlhttps://msdn.microsoft.com/en-us/library/ms1401 ...

  10. LeetCode算法题-Maximum Depth of N-ary Tree(Java实现)

    这是悦乐书的第261次更新,第274篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第128题(顺位题号是559).给定n-ary树,找到它的最大深度.最大深度是从根节点到 ...