/*
*Copyright (c) 2017,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:项目4-数据结构之自建算法库——双链表
*作    者:邵雪源
*完成日期:2017年12月13日
*版 本 号:v1.0
*/
#include <stdio.h>
#include <malloc.h>
typedef int ElemType;
typedef struct DNode        //定义双链表结点类型
{ElemType data;struct DNode *prior;    //指向前驱结点struct DNode *next;     //指向后继结点
} DLinkList;
void CreateListF(DLinkList *&L,ElemType a[],int n)
//头插法建双链表
{DLinkList *s;int i;L=(DLinkList *)malloc(sizeof(DLinkList));   //创建头结点L->prior=L->next=NULL;for (i=0; i<n; i++){s=(DLinkList *)malloc(sizeof(DLinkList));//创建新结点s->data=a[i];s->next=L->next;            //将*s插在原开始结点之前,头结点之后if (L->next!=NULL) L->next->prior=s;L->next=s;s->prior=L;}
}
void CreateListR(DLinkList *&L,ElemType a[],int n)
//尾插法建双链表
{DLinkList *s,*r;int i;L=(DLinkList *)malloc(sizeof(DLinkList));   //创建头结点L->prior=L->next=NULL;r=L;                    //r始终指向终端结点,开始时指向头结点for (i=0; i<n; i++){s=(DLinkList *)malloc(sizeof(DLinkList));//创建新结点s->data=a[i];r->next=s;s->prior=r; //将*s插入*r之后r=s;}r->next=NULL;           //终端结点next域置为NULL
}
void InitList(DLinkList *&L)
{L=(DLinkList *)malloc(sizeof(DLinkList));   //创建头结点L->prior=L->next=NULL;
}
void DestroyList(DLinkList *&L)
{DLinkList *p=L,*q=p->next;while (q!=NULL){free(p);p=q;q=p->next;}free(p);
}
bool ListEmpty(DLinkList *L)
{return(L->next==NULL);
}
int ListLength(DLinkList *L)
{DLinkList *p=L;int i=0;while (p->next!=NULL){i++;p=p->next;}return(i);
}
void DispList(DLinkList *L)
{DLinkList *p=L->next;while (p!=NULL){printf("%d ",p->data);p=p->next;}printf("\n");
}
bool GetElem(DLinkList *L,int i,ElemType &e)
{int j=0;DLinkList *p=L;while (j<i && p!=NULL){j++;p=p->next;}if (p==NULL)return false;else{e=p->data;return true;}
}
int LocateElem(DLinkList *L,ElemType e)
{int n=1;DLinkList *p=L->next;while (p!=NULL && p->data!=e){n++;p=p->next;}if (p==NULL)return(0);elsereturn(n);
}
bool ListInsert(DLinkList *&L,int i,ElemType e)
{int j=0;DLinkList *p=L,*s;while (j<i-1 && p!=NULL){j++;p=p->next;}if (p==NULL)    //未找到第i-1个结点return false;else            //找到第i-1个结点*p{s=(DLinkList *)malloc(sizeof(DLinkList));   //创建新结点*ss->data=e;s->next=p->next;        //将*s插入到*p之后if (p->next!=NULL) p->next->prior=s;s->prior=p;p->next=s;return true;}
}
bool ListDelete(DLinkList *&L,int i,ElemType &e)
{int j=0;DLinkList *p=L,*q;while (j<i-1 && p!=NULL){j++;p=p->next;}if (p==NULL)                //未找到第i-1个结点return false;else                        //找到第i-1个结点*p{q=p->next;              //q指向要删除的结点if (q==NULL)return false;       //不存在第i个结点e=q->data;p->next=q->next;        //从单链表中删除*q结点if (p->next!=NULL) p->next->prior=p;free(q);                //释放*q结点return true;}
}
int main()
{DLinkList *A;ElemType a[]= {1, 3, 2, 9, 0, 4, 5 ,6, 7, 8};InitList(A);CreateListF(A, a, 10);printf("length: %d\n", ListLength(A));ListInsert(A, 4, 12);printf("After Insert: ");DispList(A);DestroyList(A);return 0;
}

												

第四周实践项目4 建立算法库——双链表相关推荐

  1. 数据结构上机实践第九周项目1 - 二叉树算法库

    二叉树算法库 学了新的内容就应该有新的应用,本次实践将进行二叉树算法库的建立,来适应更多工程的需求,丰富算法库. 注:在main函数中,创建的用于测试的二叉树如下 首先本次建立算法库实践将会运用到多文 ...

  2. TypeScript算法专题 - [双链表1] - 双链的概念及其实现

    TypeScript算法专题 - [双链表1] 双链的概念及其实现 李俊才 CSDN:jcLee95 邮箱:291148484@163.com 专题目录:https://blog.csdn.net/q ...

  3. java数据结构与算法之双链表设计与实现

    转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/53047590 出自[zejian的博客] 关联文章: java数据结 ...

  4. 数据结构 实践项目——数据结构、算法、程序设计

    [项目1 - C/C++语言中函数参数传递的三种方式] C语言提供了两种函数参数传递的方式:传值和传地址.在C++中,又拓展了引用方式.通过本项目,确认自己已经掌握了这三种方式的原理,为后续学习做好准 ...

  5. 第四周实践项目6 循环双链表应用

    /* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目6-设非空线性表ha和hb都用带头节点的循环双链表表示.设计一个 ...

  6. C语言小项目:基于ncurses库和链表的贪吃蛇小游戏

    目录 一.项目准备 二.项目步骤 (1)选择ncurses库的原因 (2)ncurses库的基本入门 (3)贪吃蛇地图的整体规划 (4)实现贪吃蛇第一个节点的显示 (5)显示贪吃蛇的完整身子 (6)实 ...

  7. 数据结构与算法之双链表的操作

    双链表的操作 /* 实现双链表的构建.初始化.数据添加(在指定位置添加).数据删除(删除指定元素,并返回该元素的位置)的算法设计: */ #include<iostream> #inclu ...

  8. 第四周实践项目2 算法库——单链表

    /*首先设计测试函数,可以涉及初始化线性表.销毁线性表.输出线性表.插入数据元素对应的函数*/ #include <stdio.h> #include <malloc.h> t ...

  9. 第十一周项目实践1 图基本算法库

    #ifndef GRAPH_H_INCLUDED #define GRAPH_H_INCLUDED#define MAXV 100 //最大顶点个数 #define INF 32767 //INF表示 ...

最新文章

  1. Spark Mllib里的Mllib基本数据类型(图文详解)
  2. 一文读懂机器学习中的模型偏差
  3. hostingranking.cn·基于ghost的轻量技术架构整理
  4. 机器学习:用梯度下降法实现线性回归
  5. 数据结构上机实践第八周项目2- 建立链串的算法库
  6. ISO27001(BS7799/ISO17799)国标
  7. CAN BUS原理理解
  8. python jpg压缩,Python 实现图片大小压缩
  9. 安装office2013报安装程序找不到OneNote.zh-cn、安装源不存在
  10. 正面管教之PHP_2017.04.08 三正记录(正面管教课堂之出生顺序及PHP)
  11. 产品经理如何营销自己
  12. 计算机结构化面试万能套话,结构化面试30句万能套话拯救你.pdf
  13. python中rest是什么意思_Python REST消耗
  14. 三相异步电机,直流电机工作原理
  15. 无货源模式,跨境电商时代的风向标
  16. Linux ❀ KickStart-无人值守部署
  17. showModalDialog的兼容性处理方案
  18. java计算机毕业设计自动评测系统源码+mysql数据库+系统+部署+lw文档
  19. 热带气旋强度估计——物理信息融合
  20. python读取dat文件写入表格_在python中从.dat文件读取和执行计算

热门文章

  1. visual studio 2005占用cpu100% -_-...
  2. 技术团队的情绪与效率
  3. 借助LDA主题分析的短文本相似性计算 - 综述帖
  4. 算法踩坑6-二叉搜索树排序
  5. 西班牙电信拟出售 60亿欧元资产
  6. Bitlocker企业安全加密管理系列-2
  7. 清理Mac上的软件容易吗?
  8. Shell与ShellScript
  9. C可变参数详解及其函数设计
  10. asp.net treeView 节点 点击 变色