当前位置: 首页 > news >正文

c语言线性链表检验是否为空,线性链表的实现(c语言)

数据结构作业:设某线性表数据元素类型为整型,以链表结构存储线性表。试编程实现:

⑴ 输入数据元素,以先进先出形式创建单链表

⑵ 销毁单链表

⑶ 线性表置空

⑷ 求线性表长度

⑸ 在第i个数据元素前插入新的元素

⑹ 删除第i个元素

⑺ 显示线性表中的全部元素

⑻ 求最大元素的值和平均值

#include

#include

/* 定义ElemType为int类型 */

typedef int ElemType;

#define OK 1

#define ERROR 0

#define flag -0

/* 单链表的结点类型 */

typedef struct LNode

{

ElemType data;

struct LNode *next;

}   LNode,*LinkList;

/* 初始化单链表 */

LinkList InitLinkList()

{

LinkList L;

L=(LinkList)malloc(sizeof(LNode));

L->next=NULL;

return L;

}

/* 清空单链表 */

void ClearLinkList(LinkList L)

{

L->next=NULL;

printf("链表已经清空/n");

}

void DestoryList(LNode *head)

{

LNode *p,*q;

p=head;

q=head->next;

while(p)

{

free(p);

p=q;

/* 使用指针前判断其非空 */

if (q)

q=q->next;

}

printf("链表销毁成功!/n");

}

/* 检查单链表是否为空 */

int LinkListEmpty(LinkList L)

{

if(L->next==NULL) return OK;

else return ERROR;

}

/* 遍历单链表 */

void LinkListTraverse(LinkList L)

{

LinkList p;

p=L->next;

if(p==NULL) printf("单链表为空表/n");

else

{

printf("链表中的元素为:/n");

while(p!=NULL)

{

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

p=p->next;

}

}

printf("/n");

}

/* 求单链表长度 */

int LinkListLength(LinkList L)

{

LinkList p;

int j;

p=L->next;

j=0;

while(p!=NULL)

{

j++;

p=p->next;

}

return j;

}

/* 从链表中查找元素 */

LinkList GetLinkList(LinkList L,int i)

{

LinkList p;

int j;

p=L->next;

j=1;

while(p!=NULL&&j

{

p=p->next; j++;

}

if (j==i)

return p;

else return NULL;

}

/* 从链表中查找与给定元素值相同的元素在顺序表中的位置 */

int LocateLinkList(LinkList L,ElemType x)

{

LinkList p;

int j;

p=L->next; j=1;

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

{

p=p->next;

j++;

}

if(p)

return j;

else

return 0;

}

/* 向链表中插入元素 */

void LinkListInsert(LinkList L, int i, ElemType e)

{

LinkList p,s;

int j;

j=1;

p=L;

while(p&&j

{

p=p->next;

j++;

}

if(p==NULL||j>i)

printf("插入位置不正确/n");

else {s=(LNode *)malloc(sizeof(LNode));

s->data=e;

s->next=p->next;

p->next=s;

printf("%d已插入到链表中/n",e);

}

}

/* 从链表中删除元素 */

void LinkListDelete(LinkList L,int i)

{

LinkList p,q;

int j;

j=1;

p=L;

while(p->next&&j

{

p=p->next;

j++;

}

if(p->next==NULL)

printf("删除位置不正确/n");

else

{

q=p->next;

p->next=q->next;

free(q);

printf("第%d个元素已从链表中删除/n",i);

}

}

/*建立单链表*/

LinkList CreatLinkList( )

{

LinkList L=InitLinkList(),p,r;

ElemType e;

r=L;

printf("请依次输入链表中的元素,输入-0结束/n");

scanf("%d",&e);

while (e!=flag)

{

p=(LinkList)malloc(sizeof(LNode));

p->data=e;

r->next=p;

r=p;

scanf("%d",&e);

}

r->next=NULL;

return L;

}

void LinkListM(LinkList L)

{

double aver=0;

int MAX=0;

LinkList p;

p=L->next;

if(p==NULL) printf("单链表为空表/n");

else

{

while(p!=NULL)

{

aver+=p->data;

if(MAXdata)

MAX=p->data;

p=p->next;

}

printf("链表中最大元素是: %d/n",MAX);

aver=aver/LinkListLength(L);

printf("链表中元素平均值是: %f/n",aver);

}

printf("/n");

}

int scan()

{

int d;

printf("/t*********操作菜单***********/n");

printf("1.初始化 2.清空 3.求链表长度 4.检查链表是否为空/n");

printf("5.输出链表中元素 6.从链表中查找元素/n");

printf("7.从链表中查找与给定元素值相同的元素在顺序表中的位置/n");

printf("8.向链表中插入元素 9. 从链表中删除元素/n");

printf("10.建立带头结点的单链表/n");

printf("11.求链表中最大元素和平均值/n");

printf("12.销毁链表/n");

printf("其他键退出。。。。。/n");

scanf("%d",&d);

return(d);

}

void main() { int quit=0;int i,locate; ElemType e; LinkList L,p; while(!quit)    switch(scan()) {          case 1:     L=InitLinkList();     printf("/n");     break;     case 2:     ClearLinkList(L);     printf("/n");     break;     case 3:     printf("链表的长度为 %d/n/n",LinkListLength(L));     break;     case 4:     if(LinkListEmpty(L))printf("链表为空/n/n");     else       printf("链表非空/n/n");     break;     case 5:     LinkListTraverse(L);      break;     case 6:     printf("请输入待查询元素在链表中的位置:");      scanf("%d",&i);      p=GetLinkList(L,i);      if(p)       printf("链表中第%d个元素的值为:%d/n/n",i,p->data);      else       printf("查询位置不正确/n/n");      break;     case 7:     printf("请输入待查询元素的值:");      scanf("%d",&e);      locate=LocateLinkList(L,e);      if(locate)       printf("%d在链表中的位置是:%d/n/n",e,locate);      else       printf("链表中没有值为%d的元素/n/n",e);      break;     case 8:     printf("请输入插入元素的位置和值(中间以空格或回车分隔):/n");      scanf("%d%d",&i,&e);      LinkListInsert(L,i,e);      break;     case 9:     if(LinkListLength(L)==0)       printf("链表已经为空,不能删除/n/n");      else      {      printf("请输入待删除元素的位置:/n/n");       scanf("%d",&i);       LinkListDelete(L,i);     }      break;     case 10:     L=CreatLinkList();      printf("/n");     break;     case 11:     LinkListM(L);     break;    case 12:     DestoryList(L);     break;    default:     quit=1;}}

相关文章:

  • c 语言计算自信息量,基于知网义原信息量的词语相似度的计算方法
  • android 动画懒加载,Android - 懒加载
  • android怎样拼接带参数的url,这种url网址如何拼接成android 的Retrofit注解
  • android:style/theme.holo.light,Galaxy Nexus上的Android Theme.Holo.Light在模拟器没有的时候有灰色背景...
  • 华为Android10版怎么截屏,华为Mate10怎么截屏?华为Mate10两种截图方法
  • solar2 android,Solar2(太阳系行星2)
  • 同一个页面显示多个html界面,浏览器怎么设置在同一个界面/窗口打开多个网页...
  • html中判断电话是否正确,jsjquery验证邮箱和手机号是否正确范例
  • 2021年高考成绩还能查询吗,【去年高考成绩还能查吗】_怎么查询以前的高考成绩往年高考成绩能查吗...
  • 电脑播放html5绿屏,我的电脑在看暴风影音时总是绿屏 是为什么啊?有什么解决良策啊?...
  • 使用计算机 发展了人的运算能力,计算机的发展
  • 皖西学院计算机网络期末试卷,皖西学院2013–2014学年度第1学期期末考试试卷(B卷)...
  • jq+设置html+值,jQuery 设置
  • 公共基础知识计算机考题,2017年全国计算机考试二级公共基础知识试题及答案...
  • 计算机专业未来美句,关于新的开始的句子
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  •  D - 粉碎叛乱F - 其他起义
  • Elasticsearch 参考指南(升级前重新索引)
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • 百度小程序遇到的问题
  • 从重复到重用
  • 回顾2016
  • 看域名解析域名安全对SEO的影响
  • 前言-如何学习区块链
  • 如何设计一个微型分布式架构?
  • 试着探索高并发下的系统架构面貌
  • 小试R空间处理新库sf
  • Java数据解析之JSON
  • 大数据全解:定义、价值及挑战
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (4)事件处理——(7)简单事件(Simple events)
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (poj1.2.1)1970(筛选法模拟)
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)LINQ之路
  • .gitignore文件---让git自动忽略指定文件
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET CLR Hosting 简介
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .net下的富文本编辑器FCKeditor的配置方法
  • .net项目IIS、VS 附加进程调试
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • [Android Studio 权威教程]断点调试和高级调试
  • [ASP.NET MVC]Ajax与CustomErrors的尴尬
  • [AX]AX2012 SSRS报表Drill through action
  • [HackMyVM]靶场 Quick3
  • [hive] sql中distinct的用法和注意事项
  • [HTML]Web前端开发技术28(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页
  • [IE9] 解决了傲游、搜狗浏览器在IE9下网页截图的问题