#include#includetypedef int ElemType;

typedef struct node{

ElemType data;

struct node *next;

struct node *prior;

}dlink;

//建立双链表

dlink * credlink(int n){//返回的指针是指向结构体类型的

dlink *head,*p,*s;int i;

p=head=(dlink * )malloc(sizeof(dlink));

for(i=1;i<=n;i++){

s=(dlink * )malloc(sizeof(dlink));

printf("请输入数字!");

scanf("%d",&s->data);

s->prior=p;

p->next=s;

p=s;

}

p->next=head->prior=NULL;

return head;

}

//遍历双链表,和单链表相同

dlink *showlink(dlink *head){

dlink *p;

p=head->next;//p=head

while(p!=NULL){//p->next!=NULL,如果写成这样,输出结果是错误的

printf("%d ",p->data);

p=p->next;

}

printf("\n");

}

//求表长操作

int getlen(dlink *head){

dlink *p;

int len=0;

p=head->next;

while(p!=NULL){

len+=1;

p=p->next;

}

return len;

}

//取元素操作(取出双链表head中第i个结点的值)

int getelem(dlink *head,int i){

dlink *p,*s;

int j;

int e;

p=head->next;j=1;

if(i<1)return 0;//判断i结点的合法性

while(p!=NULL&&jnext;

j=j+1;

}

if(p==NULL)return 0;//结点i超过表长

e=p->data;

return e;

}

//删除节点(删除双链表中第i个节点)

dlink *deletei(dlink *head,int i){

dlink *p,*s;

int j;

p=head->next;j=1;

if(i<1)return 0;//判断i结点的合法性

while(p!=NULL&&jnext;

j=j+1;

}

if(p->next==NULL)return 0;//结点i超过表长

s=p->next;

s->next->prior=p;

p->next=s->next;

free(s);

return head;

}

//定位操作(返回双链表中第1个为值为x的结点的位置)

int locate(dlink *head,ElemType x){

dlink *p;

int i;

i=1;

p=head->next;

while(p!=NULL&&p->data!=x){

p=p->next;

i=i+1;

}

if(p==NULL)return 0;

return i;

//return p;

}

//插入操作(在双链表中第i个结点之前插入一个值为x的结点)

int insertx(dlink *head,ElemType x,int i){

dlink *p,*s;

int j=1;

p=head->next;

s=(dlink * )malloc(sizeof(dlink));

if(i<1)return 0;//插入失败

while(p!=NULL&&jnext;

j=j+1;

}

if(p==NULL)return 0;//插入失败,插入位置超出表长

s->data=x;

s->next=p->next;

s->prior=p;

p->next->prior=s;

p->next=s;

return 1;

}

//输出操作(从反方向输出双链表中各个结点的值)

dlink *invertshow(dlink *head){

dlink *p,*s;

int j=1;

p=head;

while(p->next!=NULL){

p=p->next;

}

while(p!=head){

printf("%d ",p->data);

p=p->prior;

}

}

int main(){

dlink *head;

int n,i,x;

head = NULL;

printf("请输入数字输入个数:");

scanf("%d",&n);

//创建双链表

head = credlink(n);

//遍历双链表

showlink(head);

//获取表长

//printf("该双链表表长为:%d",getlen(head));

//printf("请输入取出第i个结点\n");

//scanf("%d",&i);

取节点

//printf("所取元素为:%d",getelem(head,i));

//printf("请输入要删除的结点i\n");

//scanf("%d",&i);

//deletei(head,i);

//printf("删除后剩余链表为:\n");

//showlink(head);

//printf("请输入你想找到位置的x的值");

//scanf("%d",&x);

//printf("该位置为:%d",locate(head,x));

// printf("请输入插入数值x以及插入位置i");

// scanf("%d%d",&x,&i);

// insertx(head,x,i);

// showlink(head);

invertshow(head);

}

github下载地址:https://github.com/cantaloupeJinJin/datastructure.git

注意:一个函数可以返回一个整型值、字符值等,也可以返回指针型的数据,即地址。这种返回指针值得函数,一般定义形式为:

类型名 *a(int i,int j)

a是函数名,调用它以后能得到一个指向整型数据得指针(地址)。x,y是函数a 得形参,为整型。请注意*a两侧没有括号,在a 得两侧分别为*运算符和()运算符。而()的优先级高于*,因此a先与()结合。显然这是函数形式。这个函数前面有一个*,表示此函数是指针型函数(函数值是指针)。最前面的int表示返回的指针指向整型变量。

c语言双链表是什么意思,双链表的表示和实现(C语言)相关推荐

  1. R语言数据分析笔记——t检验(含正态性检验和方差齐性检验在SPSS和R语言中的操作t检验(单样本、双独立样本、配对样本)在Excel、SPSS、R语言中的操作)

    前言:本文为个人学习笔记,为各大网站上的教学内容之综合整理,综合整理了①假设分析的基础知识.②正态性检验和方差齐性检验在SPSS和R语言中的操作.③t检验(单样本.双独立样本.配对样本)在Excel. ...

  2. 双二阶IIR滤波器——直接I型、直接II型C语言实现

    双二阶滤波器 双二阶滤波器的生成 双二阶滤波器可以利用MATLAB的滤波器设计工具箱生成,根据目的,在Filter Designer界面中设置滤波器类型.设计方法.阶数.采样频率.截止频率等参数,如下 ...

  3. 链表(2)----双链表基本操作

    1.双链表定义 typedef struct DListElement_t_{void *data;struct DListElement_t *prev;struct DListElement_t ...

  4. 03-java数据结构之链表的学习(单链表、双链表等)

    文章目录 1.链表 1.1 链表的介绍 2.单链表 2.1.单链表的显示 2.2.单链表的添加操作 2.2.1.直接添加到链表的尾部 2.2.2.根据no插入到指定位置 2.3.单链表节点的修改 2. ...

  5. 超简单的C语言贪吃蛇 不闪屏 双缓冲

    C语言贪吃蛇 今天把以前自己写的贪吃蛇总结了一下,发到博客上,怕放在电脑上哪天丢失了都不知道, 有不当之处还望指教 (*・ω< ) ヾ(◍°∇°◍)ノ゙ 贪吃蛇中, 我们看到的蛇在不断的移动,其 ...

  6. c语言实现线性结构(数组与链表)

    由于这两天看了数据结构,所以又把大学所学的c语言和指针"挂"起来了. 本人菜鸟一枚请多多指教.下面是我这两天学习的成果(数组和链表的实现,用的是c语言哦!哈哈). (一)数组的实现 ...

  7. 用c语言描述单链表的数据类型,数据结构—单链表(类C语言描述)

    单链表 1.链接存储方法 链接方式存储的线性表简称为链表(Linked List).     链表的具体存储表示为: ① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不 ...

  8. Algorithm:C++语言实现之链表相关算法(链表相加、链表的部分翻转、链表划分、链表去重、重复元素全部删除)

    Algorithm:C++语言实现之链表相关算法(链表相加.链表的部分翻转.链表划分.链表去重.重复元素全部删除) 目录 一.链表 1.1.链表相加 1.2.链表相加 2.1.链表的部分翻转 2.2. ...

  9. c语言中头结点不为零怎么写,C语言不带表头结点的单链表操作

    什么是链表 简单理解为链表的功能与数组功能相似用来存储数据,链表作为一种基本的数据结构在程序开发过程当中经常会使用到.对C语言来说链表的实现主要依靠结构体(可以存储多种数据类型)和指针,所以本文相关内 ...

  10. C语言链表的转置算法,c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置.doc...

    c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置 #include "stdio.h" #include "malloc.h" /*typedef s ...

最新文章

  1. apache+svn服务搭建
  2. SiameseNet(Learning Text Similarity with Siamese Recurrent Networks)
  3. Caffe学习系列(22):caffe图形化操作工具digits运行实例
  4. c语言 #define dpath .exe是什么意思,C语言宏定义#define
  5. JavaScript基础学习之运算符(三)
  6. Java笔记04-核心类库
  7. Sonatype Nexus高级配置
  8. Pytorch:ToTensor(object)类
  9. javascrip学习之 数据类型和变量
  10. Scrapy入门程序点评
  11. Django 千锋培训的学习笔记
  12. 计算机二级c语言的书籍,全国计算机二级c语言
  13. GitHub使用教程-官网指南
  14. 郑捷《机器学习算法原理与编程实践》学习笔记(第六章 神经网络初步)6.3 自组织特征映射神经网路(SOM)...
  15. android 颜色color.xml文件及部分中英文对照
  16. 使用 Nginx 如何部署 web 项目
  17. USACO Score Inflation 总分
  18. ora-01237 ora-01110 ora-17505 ora-15041
  19. PyTorch 1.0 中文文档:torch.utils.model_zoo
  20. QML 播放 http 协议开头的视频流的一些问题DirectShowPlayerService::doPlay: Unresolved error code 8007000e

热门文章

  1. python做mysql数据迁移_Python中MySQL数据迁移到MongoDB脚本的方法
  2. mysql同步binlog_利用MySQL的Binlog实现数据同步与订阅(下)
  3. conda init 关闭和重启shell_Linux的/etc/init.d详解
  4. mysql使用释放资源_数据库--释放mysql数据库资源
  5. 【控制】《多智能体机器人系统信息融合与协调》范波老师-第7章-基于 Markov 对策的多 Agent 协调
  6. 2.9 Logistic 回归的梯度下降法-深度学习-Stanford吴恩达教授
  7. 一起学nRF51xx 12 -  flash
  8. 数字电路可控门电路原理(三态/同相/反相、缓冲/驱动电路)
  9. 【PC工具】网站服务器端口检测工具,网络端口扫描工具,win10telnet安装方法
  10. [Android工具]安卓百度云盘百度网盘资源搜索工具,安卓网盘搜索软件