c语言双链表是什么意思,双链表的表示和实现(C语言)
#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语言)相关推荐
- R语言数据分析笔记——t检验(含正态性检验和方差齐性检验在SPSS和R语言中的操作t检验(单样本、双独立样本、配对样本)在Excel、SPSS、R语言中的操作)
前言:本文为个人学习笔记,为各大网站上的教学内容之综合整理,综合整理了①假设分析的基础知识.②正态性检验和方差齐性检验在SPSS和R语言中的操作.③t检验(单样本.双独立样本.配对样本)在Excel. ...
- 双二阶IIR滤波器——直接I型、直接II型C语言实现
双二阶滤波器 双二阶滤波器的生成 双二阶滤波器可以利用MATLAB的滤波器设计工具箱生成,根据目的,在Filter Designer界面中设置滤波器类型.设计方法.阶数.采样频率.截止频率等参数,如下 ...
- 链表(2)----双链表基本操作
1.双链表定义 typedef struct DListElement_t_{void *data;struct DListElement_t *prev;struct DListElement_t ...
- 03-java数据结构之链表的学习(单链表、双链表等)
文章目录 1.链表 1.1 链表的介绍 2.单链表 2.1.单链表的显示 2.2.单链表的添加操作 2.2.1.直接添加到链表的尾部 2.2.2.根据no插入到指定位置 2.3.单链表节点的修改 2. ...
- 超简单的C语言贪吃蛇 不闪屏 双缓冲
C语言贪吃蛇 今天把以前自己写的贪吃蛇总结了一下,发到博客上,怕放在电脑上哪天丢失了都不知道, 有不当之处还望指教 (*・ω< ) ヾ(◍°∇°◍)ノ゙ 贪吃蛇中, 我们看到的蛇在不断的移动,其 ...
- c语言实现线性结构(数组与链表)
由于这两天看了数据结构,所以又把大学所学的c语言和指针"挂"起来了. 本人菜鸟一枚请多多指教.下面是我这两天学习的成果(数组和链表的实现,用的是c语言哦!哈哈). (一)数组的实现 ...
- 用c语言描述单链表的数据类型,数据结构—单链表(类C语言描述)
单链表 1.链接存储方法 链接方式存储的线性表简称为链表(Linked List). 链表的具体存储表示为: ① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不 ...
- Algorithm:C++语言实现之链表相关算法(链表相加、链表的部分翻转、链表划分、链表去重、重复元素全部删除)
Algorithm:C++语言实现之链表相关算法(链表相加.链表的部分翻转.链表划分.链表去重.重复元素全部删除) 目录 一.链表 1.1.链表相加 1.2.链表相加 2.1.链表的部分翻转 2.2. ...
- c语言中头结点不为零怎么写,C语言不带表头结点的单链表操作
什么是链表 简单理解为链表的功能与数组功能相似用来存储数据,链表作为一种基本的数据结构在程序开发过程当中经常会使用到.对C语言来说链表的实现主要依靠结构体(可以存储多种数据类型)和指针,所以本文相关内 ...
- C语言链表的转置算法,c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置.doc...
c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置 #include "stdio.h" #include "malloc.h" /*typedef s ...
最新文章
- apache+svn服务搭建
- SiameseNet(Learning Text Similarity with Siamese Recurrent Networks)
- Caffe学习系列(22):caffe图形化操作工具digits运行实例
- c语言 #define dpath .exe是什么意思,C语言宏定义#define
- JavaScript基础学习之运算符(三)
- Java笔记04-核心类库
- Sonatype Nexus高级配置
- Pytorch:ToTensor(object)类
- javascrip学习之 数据类型和变量
- Scrapy入门程序点评
- Django 千锋培训的学习笔记
- 计算机二级c语言的书籍,全国计算机二级c语言
- GitHub使用教程-官网指南
- 郑捷《机器学习算法原理与编程实践》学习笔记(第六章 神经网络初步)6.3 自组织特征映射神经网路(SOM)...
- android 颜色color.xml文件及部分中英文对照
- 使用 Nginx 如何部署 web 项目
- USACO Score Inflation 总分
- ora-01237 ora-01110 ora-17505 ora-15041
- PyTorch 1.0 中文文档:torch.utils.model_zoo
- QML 播放 http 协议开头的视频流的一些问题DirectShowPlayerService::doPlay: Unresolved error code 8007000e
热门文章
- python做mysql数据迁移_Python中MySQL数据迁移到MongoDB脚本的方法
- mysql同步binlog_利用MySQL的Binlog实现数据同步与订阅(下)
- conda init 关闭和重启shell_Linux的/etc/init.d详解
- mysql使用释放资源_数据库--释放mysql数据库资源
- 【控制】《多智能体机器人系统信息融合与协调》范波老师-第7章-基于 Markov 对策的多 Agent 协调
- 2.9 Logistic 回归的梯度下降法-深度学习-Stanford吴恩达教授
- 一起学nRF51xx 12 - flash
- 数字电路可控门电路原理(三态/同相/反相、缓冲/驱动电路)
- 【PC工具】网站服务器端口检测工具,网络端口扫描工具,win10telnet安装方法
- [Android工具]安卓百度云盘百度网盘资源搜索工具,安卓网盘搜索软件