第四周实践项目2 算法库——单链表
/*首先设计测试函数,可以涉及初始化线性表、销毁线性表、输出线性表、插入数据元素对应的函数*/
#include <stdio.h>
#include <malloc.h>
typedef int ElemType;
typedef struct LNode //定义单链表结点类型
{ElemType data;struct LNode *next; //指向后继结点
}LinkList;/*
void CreateListF(LinkList *&L,ElemType a[],int n);//头插法建立单链表
void CreateListR(LinkList *&L,ElemType a[],int n);//尾插法建立单链表
void InitList(LinkList *&L); //初始化线性表
void DestroyList(LinkList *&L); //销毁线性表
bool ListEmpty(LinkList *L); //判断线性表是否为空
int ListLength(LinkList *L); //求线性表长度
void DispList(LinkList *L); //输出线性表
bool GetElem(LinkList *L,int i,ElemType &e); //求线性表某个数据元素值
int LocateElem(LinkList *L,ElemType e); //按元素值查找
bool ListInsert(LinkList *&L,int i,ElemType e); //插入数据元素
bool ListDelete(LinkList *&L,int i,ElemType &e); //删除数据元素*/
void CreateListF(LinkList *&L,ElemType a[],int n)//头插法建立单链表
{LinkList *s;int i;L=(LinkList *)malloc(sizeof(LinkList)); //创建头结点L->next=NULL;for (i=0; i<n; i++){s=(LinkList *)malloc(sizeof(LinkList));//创建新结点s->data=a[i];s->next=L->next; //将*s插在原开始结点之前,头结点之后L->next=s;}
}
void CreateListR(LinkList *&L,ElemType a[],int n)//尾插法建立单链表
{LinkList *s,*r;int i;L=(LinkList *)malloc(sizeof(LinkList)); //创建头结点L->next=NULL;r=L; //r始终指向终端结点,开始时指向头结点for (i=0; i<n; i++){s=(LinkList *)malloc(sizeof(LinkList));//创建新结点s->data=a[i];r->next=s; //将*s插入*r之后r=s;}r->next=NULL; //终端结点next域置为NULL
}
void InitList(LinkList *&L)
{L=(LinkList *)malloc(sizeof(LinkList)); //创建头结点L->next=NULL;
}
void DestroyList(LinkList *&L)
{LinkList *p=L,*q=p->next;while (q!=NULL){free(p);p=q;q=p->next;}free(p); //此时q为NULL,p指向尾结点,释放它
}
bool ListEmpty(LinkList *L)
{return(L->next==NULL);
}
int ListLength(LinkList *L)
{LinkList *p=L;int i=0;while (p->next!=NULL){i++;p=p->next;}return(i);
}
void DispList(LinkList *L)
{LinkList *p=L->next;while (p!=NULL){printf("%d ",p->data);p=p->next;}printf("\n");
}
bool GetElem(LinkList *L,int i,ElemType &e)
{int j=0;LinkList *p=L;while (j<i && p!=NULL){j++;p=p->next;}if (p==NULL) //不存在第i个数据结点return false;else //存在第i个数据结点{e=p->data;return true;}
}
int LocateElem(LinkList *L,ElemType e)
{LinkList *p=L->next;int n=1;while (p!=NULL && p->data!=e){p=p->next;n++;}if (p==NULL)return(0);elsereturn(n);
}
bool ListInsert(LinkList *&L,int i,ElemType e)
{int j=0;LinkList *p=L,*s;while (j<i-1 && p!=NULL) //查找第i-1个结点{j++;p=p->next;}if (p==NULL) //未找到位序为i-1的结点return false;else //找到位序为i-1的结点*p{s=(LinkList *)malloc(sizeof(LinkList));//创建新结点*ss->data=e;s->next=p->next; //将*s插入到*p之后p->next=s;return true;}
}
bool ListDelete(LinkList *&L,int i,ElemType &e)
{int j=0;LinkList *p=L,*q;while (j<i-1 && p!=NULL) //查找第i-1个结点{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个结点,返回falsee=q->data;p->next=q->next; //从单链表中删除*q结点free(q); //释放*q结点return true;}
}
int main()
{LinkList *L;InitList(L);ListInsert(L, 1, 15);ListInsert(L, 1, 10);ListInsert(L, 1, 5);ListInsert(L, 1, 20);DispList(L);DestroyList(L);return 0;
}
第四周实践项目2 算法库——单链表相关推荐
- 第八周实践项目9 算法库——广义表
/* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目9- *作 者:邵雪源 *完成日期:2017年12月14日 *版 ...
- 第四周实践项目4 建立算法库——双链表
/* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目4-数据结构之自建算法库--双链表 *作 者:邵雪源 *完成日期 ...
- 数据结构与算法:单链表(利用万能指针实现对任意类型数据进行操作)
前言 C语言的指针真的很强大,万能指针更强大,可以指向任意类型的数据.在上篇博客 数据结构与算法:单链表(超详细实现)中用C语言实现了单链表的相关算法,不过却有局限性 只能针对某一种数据类型还是不够强 ...
- 数据结构与算法之单链表
数据结构与算法之单链表 //链表的实现/*实现单链表的 构建.数据添加.数据删除(返回元素所在位置).数据查找(返回元素所在的位置)的算法设计:*/ //链表的实现/*实现单链表的 构建.数据添加.数 ...
- 冒泡排序算法的单链表实现
引言: 这几天都在忙着参加几个工作室(别问为什么是"几个",问就是海投)的考核,报的都是后台组.后台的考核中必定是少不了单链表ADT和排序算法的.本专栏将专攻排序算法部分.注意,是 ...
- 第四周实践项目3单链表:逆置、连接与递增判断(包含三个程序)
/* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目3-1.设计一个算法,将一个带头结点的数据域依次为a1,a2,- ...
- 第四周实践项目7 多项式求和
/* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目7- 用单链表存储一元多项式,并实现两个多项式的加法. *作 者 ...
- 第四周实践项目5 猴子选大王(循环链表)
/* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目5-一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m ...
- 单链表的合并算法_图解算法:单链表两两反转 | 眼睛会了手就会系列
一. 序 链表作为一种基本的数据结构,本身理解起来,很简单.它通过指针或者叫引用,将一组零散的内存空间(结点),串联起来组成一个数据存储结构. 链表根据其指针的指向和丰富程度,可以分为单链表.双向链表 ...
最新文章
- 可爱又好用!阿里云盘「小白羊版」
- 【Paper】2020_异构无人机编队防御及评估策略研究_左剑凯
- MongoDB和Java(5):Spring Data整合MongoDB(注解配置)
- Flutter 气泡背景效果 仿苹果桌面运动的气泡
- 基于visual Studio2013解决C语言竞赛题之1083人机博弈
- 详细剖析linux的内存管理方式(分段式、分页式、段页式),以及进程状态的具体关系
- 5.7 并行复制配置 基于GTID 搭建中从 基于GTID的备份与恢复,同步中断处理
- Android快速开发框架ZBLibrary源码分享
- 当BeanUtils遇到泛型
- Python文章归档
- SAP BW报表使用操作手册——基础操作
- 无刷直流电机四象限matlab pudn,一种无刷直流电机四象限PWM调制方式的分析和设计...
- 基于Hough变换的直线检测(Matlab)
- 应用时间序列分析_时间序列-应用
- 基于nrf52832 mpu6050应用实例(7)
- 我体验了禾多科技的自动驾驶汽车,离量产不远了!
- java 存根,使用mockito使用三个参数对方法进行存根
- VOIP 语音视频通话 ---总述
- 英文文献翻译(白嫖版)
- 超好用的windows远程桌面管理工具Remote Desktop Connection Manager
热门文章
- How to use USB to do charger detection instead of PMIC?
- android根据项目把文件编译到文件系统中
- Android2.3.7源码结构分析
- java join()源码_Java Thread的join() 之刨根问底
- 是啥意思_227大团结是什么梗啥意思 微博227大团结事件始末介绍
- antd + react model自定义footer_使用ESLint+Prettier规范React+Typescript项目
- “5W1H”带你来学习JavaScript
- 在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类
- 2015/06/08
- #研发解决方案介绍#基于StatsD+Graphite的智能监控解决方案