首页 > 其他分享 >更完整的顺序表

更完整的顺序表

时间:2023-04-18 21:00:13浏览次数:32  
标签:listlen 顺序 return cout int 完整 SL data

#include<bits/stdc++.h>
#include<string.h>
using namespace std;
#define maxlen 100 //表的最大长度
typedef struct{
int key;
char name[20];
int age;
} Data;//节点的结构
typedef struct{
Data listdata[maxlen];//用于保存结点的结构体数组
int listlen;//节点数量/表的长度
}SLType;//顺序表的结构
int SLInit(SLType* SL)
{
SL->listlen=0;
}//初始一个空表。
int SLLength(SLType*SL){
return SL->listlen;
}//输出表的长度。
int SLInsert(SLType *SL,int n,Data data)
{
int i;
if(SL->listlen>=maxlen)
{
printf("顺序表已满,无法插入\n");
return 0;
}
if(n>SL->listlen||n<1)
{
printf("插入元素序号有误,无法插入\n");
return 0;
}
for(i=SL->listlen;i>=n-1;i--)
{
SL->listdata[i+1]=SL->listdata[i];
}
SL->listdata[n-1]=data;
SL->listlen+=1;//节点数量加一;
cout<<"插入成功!"<<endl;
return 1;
}//插入一个数据
int SLAdd(SLType*SL,Data data)
{
if(SL->listlen>=maxlen)
{
printf("顺序表已满,无法添加");
return 0;
}
else{
SL->listdata[SL->listlen]=data;
SL->listlen++;
cout<<"追加节点成功!"<<endl;
return 1;
}
} //判断顺序表是否已满,在表的末尾添加一个数据。
int SLDelete(SLType *SL,int n)
{
if(n<1||n>SL->listlen)
{
printf("输入节点序号有误,无法删除\n");
return 0;
}
int i=n-1;
for(i;i<SL->listlen;i++)
{
SL->listdata[i]=SL->listdata[i+1];
}
SL->listlen-=1;
cout<<"删除数据成功!"<<endl;
return 1;
}//删除指定数据;
int SLFindByCont(SLType*SL,int key){
int i=0;
for(i;i<=SL->listlen;i++)
{
if(SL->listdata[i].key==key)
{
cout<<"学生姓名:"<<SL->listdata[i].name<<" 学生年龄:"<<SL->listdata[i].age<<endl;
return 0;
}
}
cout<<"未查找到相关信息!"<<endl;
return 0;
} //查找指定数据的序号;
int Printf(SLType *SL)
{
int i;
for(i=0;i<SL->listlen;i++)
{
cout<<"第"<<i+1<<"名学生信息:"<<"学号: "<<SL->listdata[i].key<<"姓名: "<<SL->listdata[i].name<<"年龄: "<<SL->listdata[i].age<<endl;
}
return 0;
}
int main()
{
int i;
SLType SL;//定义顺序表
Data data;//定义节点
char key[10];
SLInit(&SL);
cout<<"初始化顺序表完成"<<endl;
while(1)
{
cout<<"请输入节点(学号 姓名 年龄)"<<endl;
cin>>data.key>>data.name>>data.age;
//fflush(stdin);
if(data.age)
{
if(!SLAdd(&SL,data))
{
break;
}
}
else{
break;
}
}
cout<<endl<<"顺序表的节点顺序:"<<endl;
Printf(&SL);//输出已录入的学生;
int flag;
while(1)
{
cout<<"请选择接下来的操作:追加节点(1),插入节点(2),删除节点(3),查看已有的节点数量(4),输出全部数据(5),查找信息(6)结束操作(7)"<<endl;
cin>>flag;
if(flag==1)
{
Data data;
cout<<"输入追加的学生学号、姓名、年龄:"<<endl;
cin>>data.key>>data.name>>data.age;
SLAdd(&SL,data);
}
if(flag==2)
{
int i;
Data data;
cout<<"请输入希望插入的位置(整数)及学生学号、姓名、年龄:"<<endl;
cin>>i>>data.key>>data.name>>data.age;
SLInsert(&SL,i,data);
}
if(flag==3)
{
int i;
cout<<"请输入删除的节点序号(整数): "<<endl;
cin>>i;
SLDelete(&SL,i);
}
if(flag==4)
{
cout<<"已有的节点个数:"<<SLLength(&SL)<<endl;
}
if(flag==5)
{
Printf(&SL);
}
if(flag==6)
{
int i;
cout<<"按学号查找(1)按姓名查找(2)"<<endl;
cin>>i;
if(i==1)
{
int key;
cout<<"请输入学号: "<<endl;
cin>>key;
SLFindByCont(&SL,key);
}
//按姓名查找else
}
if(flag==7)
{
cout<<"感谢使用!"<<endl;
break;
}
}
return 0;
}

总结:

今天解决了在录入数据后因为节点数量导致无法正常输出的问题;

对数组下标和实际需要的序号进行了改进;

增加了多分支操作;

仍存在的问题:

对于标红加粗的语句理解不深;

剩余按姓名查找的函数未写(明日再写);

按学号查找由字符串类型更换为int类型,对于字符串函数的理解应用不足,导致查找函数无法编译;

 

 

 

标签:listlen,顺序,return,cout,int,完整,SL,data
From: https://www.cnblogs.com/djcf/p/17331076.html

相关文章

  • 【Python毕业设计】基于Python+Flask+MySQL的学生信息管理系统(附完整源码)
    1、项目说明基于python+Flask+mysql的学生信息管理系统项目实战项目需要安装pycharm专业版,mysql数据库以及项目所需的所有模块创建数据库名称db_online_notes,然后执行sql文件生成数据表和数据项目需要安装flask,pymysql以及其他的一些模块安装命令如下:pipinstall-ihttps://......
  • 保障请求的执行顺序
    前端防抖节流后端分布式锁redis的分布式锁zookeeper的分布式锁dubbo的一致性hash负载均衡策略(相同类型的数据Mod到同一个机器上),然后在使用内存队(例如:redis队列)业务保证幂等性缓存控制redis插入set,下次支付前先判断是否存在。数据库数据库的乐观锁......
  • GDB frame和backtrace命令:查看栈信息--附gdb完整参考
    当程序因某种异常停止运行时,我们要做的就是找到程序停止的具体位置,分析导致程序停止的原因。对于C、C++程序而言,异常往往出现在某个函数体内,例如main()主函数、调用的系统库函数或者自定义的函数等。要知道,程序中每个被调用的函数在执行时,都会生成一些必要的信息,包括:函数调......
  • 实际问题中用到的算法——递归算法确定插帧顺序
    问题:现在需要给一个视频序列插帧,插帧算法要求每次只能由两帧输入插值得到其中间帧。如果现在需要给一个视频做4倍(或者更高的8,16倍等类似)的插帧,则一个插帧的思路是当前视频每相邻帧之间插入3帧,即:假设插帧前视频帧序号是0,4,8,12…,则插帧时补充相邻帧跨过的3个序号,得到插......
  • Springboot集成dubbo完整过程(三)
    准备工作1,准备mysql服务环境2,准备redis服务环境3,准备zookeeper服务环境4,准备逆向生成bean的xml配置文件5,准备slf4j日志xml配置文件6,准备一个sql脚本1,搭建创建服务工程1,创建一个空的父工程,用来统一管理依赖2,创建一个interface接口工程,主要存放业务bean,接口类3,创建一......
  • Grafana监控OracleDB的完整过程
    Grafana监控OracleDB的完整过程背景两年前曾经写过一个进行Oracle监控的简单blog但是周天晚上尝试进行处理时发现很不完整了.很多数据获取不到.晚上又熬夜了好久进行处理.感觉还是需要总结一下,不然就忘记了获取镜像还是使用docker的方式来暴露Oracle的服务使用的......
  • 【Git代码仓库托管】上海道宁为您提供构建、扩展和交付安全软件的完整开发人员平台
      GitHub是用于构建、扩展和交付安全软件的完整开发人员平台通过提高开发人员速度的工具推动创新加快高质量软件开发  GitHub提供无限的存储库一流的版本控制和世界上强大的开源社区因此您的团队可以更高效地协同工作  开......
  • 【230417-3】某台小型晚会由6个节目组成,演出顺序有如下要求:节目甲必须排在前两位,节目
    ......
  • 未知顺序表
    #include<iostream>#include<string>usingnamespacestd;#include<bits/stdc++.h>#definemaxlen100//表的最大长度typedefstruct{ charkey[10]; charname[20]; intage;}Data;//节点的结构typedefstruct{ Datalistdata[maxlen+1];//用于保存结点的结构体数组 int......
  • 实现顺序表的增删查改
    什么是顺序表我们要知道什么是顺序表首先我们就要知道什么是线性表,线性表(linearlist)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物......