顺序表以及单链表

news2024/10/24 4:41:09

目录

1顺序表(规范)

2单链表(规范)

3总结


1顺序表(规范)

#include<iostream>

using namespace std;

#define MAXSIZE 100

#define ok -1

#define error -2

typedef int Status;

typedef int ElemType;

typedef struct

{

ElemType *elem;

int length;

}Sqlist;

Status InitList(Sqlist &L);

void chushi(Sqlist &L,int x);

void shuchu(Sqlist L);

Status GetElem(Sqlist L,int i,ElemType &e);

Status ListInsert(Sqlist &L,int i,ElemType e);

Status Delete(Sqlist &L,int i);

Status Sort(Sqlist &L);

void SequenceSort(Sqlist &L,ElemType x);

int main()

{

Sqlist L;

int x,i,j;

Status m;

ElemType e;

x=InitList(L);

if(x==error) cout<<"初始化失败"<<endl;

else        cout<<"初始化成功"<<endl;

cout<<"请决定输入元素的个数";

cin>>x;

chushi(L,x);

cout<<endl<<"请输入所取的位置"<<endl;

cin>>i;

x==GetElem(L,i,e);

if(x==error) cout<<"取值操作失败"<<endl;

else        cout<<"取值成功,第"<<i<<"个位置的元素为"<<e<<endl;

cout<<"请输入要插入的个数";

cin>>x;

for(j=1;j<=x;j++)

{

cout<<endl<<"请输入要插入的位置及其元素";

cin>>i>>e;

m=ListInsert(L,i,e);

if(m==error)

{

cout<<"插入失败";break;

}

shuchu(L);

}

cout<<endl<<"请输入要删除的个数";

cin>>x;

for(j=1;j<=x;j++)

{

cout<<"请输入要删除的位置";

cin>>i;

m=Delete(L,i);

if(m==error)

{

cout<<"删除失败";

}

}

m=Sort(L);

if(m==error) cout<<"排序失败";

cout<<endl<<"请决定向有序表中插入几个数值:";

cin>>j;

for(i=1;i<=j;i++)

{

cout<<endl<<"请输入第"<<i<<"个要插入的元素";

cin>>x;

SequenceSort(L,x);

}

return 0;

}

Status InitList(Sqlist &L)//初始化开辟空间

{

L.elem=new ElemType[MAXSIZE];

if(!L.elem) return error;

L.length=0;

return ok;

}

void chushi(Sqlist &L,int x)//初始化赋值

{

ElemType m;

for(int i=0;i<x;i++)

{

cout<<"请对第"<<i+1<<"个位置赋值";

cin>>m;

L.elem[i]=m;

L.length++;

}

}

Status GetElem(Sqlist L,int i,ElemType &e)//根据位置进行取数据的取值操作

{

if(i<1||i>L.length) return error;

e=L.elem[i-1];

return ok;

}

void shuchu(Sqlist L)//输出操作

{

cout<<"顺序表为:";

for(int i=0;i<L.length;i++)

{

cout<<L.elem[i]<<"  ";

}

}

Status ListInsert(Sqlist &L,int i,ElemType e)//插入

{

if(i<1||i>L.length+1) return error;

if(L.length==MAXSIZE) return error;

for(int j=L.length-1;j>=i-1;j--)

L.elem[j+1]=L.elem[j];

L.elem[i-1]=e;

++L.length;

return ok;

}

Status Delete(Sqlist &L,int i)//删除

{

if(i<1||i>L.length+1) return error;

for(int j=i;j<=L.length-1;j++)

L.elem[j-1]=L.elem[j];

L.length--;

shuchu(L);

return ok;

}

Status Sort(Sqlist &L)

{

int t;

int i,k,j;

for(i=0;i<L.length;i++)

{

k=0;

for(j=0;j<L.length-i-1;j++)

{

if(L.elem[j]>=L.elem[j+1])

{

t=L.elem[j];

L.elem[j]=L.elem[j+1];

L.elem[j+1]=t;

k=1;

}

}

if(k==0) break;

}

cout<<endl<<"按照升序排序为:"<<endl;

shuchu(L);

return ok;

}

void SequenceSort(Sqlist &L,ElemType x)

{

int y=2;

ListInsert(L,y,x);

Sort(L);

}

2单链表(规范)

#include<iostream>

using namespace std;

#define ok -1

#define error -2

typedef int Status;

typedef int ElemType;

typedef struct LNode

{

ElemType data;

struct LNode *next;

}LNode,*LinkList;

Status InitList(LinkList &L);

Status fuzhi(LinkList &L,int m);

void shuchu(LinkList L);

Status ListInsert(LinkList &L,int m,ElemType y);

Status Delete(LinkList &L,int n);//删除

void Sort(LinkList &L);

Status Length(LinkList L);

void SequenceSort(LinkList &L,ElemType x);

int main()

{

LinkList L;

int x,m,n;

ElemType y;

x=InitList(L);

if(x==error) cout<<"初始化失败";

else         cout<<"初始化成功"<<endl;

cout<<"请决定输入几个元素";

cin>>m;

x=fuzhi(L,m);

if(x==error) cout<<"赋值失败";

shuchu(L);

cout<<"请决定插入元素的数量:";

cin>>x;

for(int i=1;i<=x;i++)

{

cout<<"请决定插入位置及其元素";

cin>>m>>y;

ListInsert(L,m,y);

shuchu(L);

}

cout<<endl<<"请输入要删除的个数";

cin>>x;

for(int j=1;j<=x;j++)

{

cout<<"请输入要删除的位置";

cin>>n;

m=Delete(L,n);

if(m==error)

{

cout<<"删除失败";break;

}

shuchu(L);

}

Sort(L);

shuchu(L);

cout<<endl<<"请决定向有序表中插入几个数值:";

cin>>m;

for(int i=1;i<=m;i++)

{

cout<<endl<<"请输入第"<<i<<"个要插入的元素";

cin>>x;

SequenceSort(L,x);

shuchu(L);

}

return 0;

}

Status InitList(LinkList &L)

{

L=new LNode;

if(L==NULL) return error;

L->next=NULL;

return ok;

}

Status fuzhi(LinkList &L,int m)

{

LNode *s,*r=L;

ElemType n;

for(int i=1;i<=m;i++)

{

cout<<"请输入第"<<i<<"个元素";

cin>>n;

s=new LNode;

s->data=n;

r->next=s;

r=s;

}

r->next=NULL;

return ok;

}

void shuchu(LinkList L)

{

LNode *p;

p=L->next;

cout<<"单链表内容为:";

while(p!=NULL)

{

cout<<p->data<<" ";

p=p->next;

}

cout<<endl;

}

Status ListInsert(LinkList &L,int x,ElemType y)//插入 前者为位置后者是元素

{

LNode *p=L,*s;

int j=0;

while(p&&(j<(x-1)))

{

p=p->next;

++j;

}

if(!p||j>(x-1)) return error;

s=new LNode;

s->data=y;

s->next=p->next;

p->next=s;

return ok;

}

Status Delete(LinkList &L,int n)

{

LNode *p=L,*q;

int j=0;

while((p->next)&&(j<(n-1)))

{

p=p->next;

++j;

}

if(!(p->next)||(j>n-1)) return error;

q=p->next;

p->next=q->next;

delete q;

return ok;

}

Status Length(LinkList L)

{

int i,j=0;

LNode *p=L->next;

while(p!=NULL)

{

p=p->next;

++j;

}

return j;

}

void Sort(LinkList &L)

{

int i=0,j=0,m=Length(L);

Status t;

LNode *p,*p1,*p2;

for(i=0;i<m-1;i++)

{

p=L->next;

for(j=0;j<m-i-1;j++)

{

p1=p;

p2=p1->next;

if(p1->data>p2->data)

{

t=p2->data;

p2->data=p1->data;

p1->data=t;

}

p=p->next;

}

}

printf("链表升序为:\n");

}

void SequenceSort(LinkList &L,ElemType x)

{

int y=2;

ListInsert(L,y,x);

Sort(L);

}

3总结

六、总结   //注意:必须写!

1.实验过程中遇到的问题及解决方法

问题1:不懂得直接在结构体给数组开辟空间和动态开辟数组空间的区别

解决方法:小组讨论依旧不懂,经老师解答懂了

问题2:对顺序表的长度和数组下标理解有些混乱,导致插入,删除,排序出错

解决方法:看课本并实践解决

2.收获

1如何动态开辟数组空间,以及创建结构体

2学会顺序表和单链表的基本操作(增删改查)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1498059.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

支小蜜校园防欺凌系统如何有效应对学生霸凌?

学生霸凌不仅直接伤害到被霸凌者的身心健康&#xff0c;也对整个校园的和谐氛围构成了威胁。为了应对这一问题&#xff0c;校园防欺凌系统应运而生&#xff0c;成为维护校园安全、保护学生权益的重要工具。那么当校园防欺凌系统面对学生霸凌时&#xff0c;该如何有效应对呢&…

K8S之实现业务的蓝绿部署

如何实现蓝绿部署 什么是蓝绿部署&#xff1f;蓝绿部署的优势和缺点优点缺点 通过k8s实现线上业务的蓝绿部署 什么是蓝绿部署&#xff1f; 部署两套系统&#xff1a;一套是正在提供服务系统&#xff0c;标记为 “绿色” &#xff1b;另一套是准备发布的系统&#xff0c;标记为…

JS函数

目录 1.Function声明 2.匿名函数 3.函数表达式 4.箭头函数 5.构造函数 个人版JS函数使用&#xff1a; 函数的声明&#xff1a;函数如果有return则返回的是 return 后面的值&#xff0c;如果函数没有有return 声明方式一&#xff1a; 声明方式二&#xff1a;变量名声明…

0x04_数组_指针_字符串

数组 数组的定义与使用 数组是具有一定顺序关系的若干相同类型变量的集合体&#xff0c;组成数组的变量称为该数组的元素。 给出下面程序的输出&#xff1a; #include <iostream> using namespace std; int main() {int a[10], b[10];for(int i 0; i < 10; i) {a[…

【Web前端入门学习】—CSS

目录 CSS简介CSS语法CSS三种导入方式CSS选择器元素选择器&#xff08;标签选择器&#xff09;类选择器ID选择器通用选择器子元素选择器后代选择器&#xff08;包含选择器&#xff09;并集选择器&#xff08;兄弟选择器&#xff09;伪类选择器伪元素选择器 CSS常用属性盒子模型网…

3.7练习题解

一共五道题&#xff1a; 1. PERKET&#xff1a; 观察容易发现n的值很小&#xff0c;所以我们可以考虑使用dfs的方法进行解答&#xff0c;首先我们可以考虑一共有n种配料&#xff0c;那么我们就可以考虑到可以选择1到n种配料数目&#xff0c;然后基于这个思路我们再对其进行判断…

评测本地部署的语音识别模型

1 引言 最近&#xff0c;朋友给我发来了一段音频&#xff0c;想转录成文字&#xff0c;并使用大型润色文本。音频中的普通话带有一定的口音&#xff0c;并且讲解内容较为专业&#xff0c;所以一般的语音识别工具很难达到较高的识别率。 于是试用了两个大模型。Whisper 是目前…

大数据背景下R语言lavaan在SEM中的高效应用

结构方程模型&#xff08;SEM&#xff09;是揭示系统内变量间复杂关系的强大工具。它利用图形化的方式&#xff0c;将多变量间的因果关系网展现得淋漓尽致&#xff0c;具备出色的数据分析能力和广泛的适用性。近年来&#xff0c;无论是在生态、进化、环境领域&#xff0c;还是在…

分类预测 | Matlab基于GWO-RBF灰狼算法优化径向基神经网络的分类预测

分类预测 | Matlab基于GWO-RBF灰狼算法优化径向基神经网络的分类预测 目录 分类预测 | Matlab基于GWO-RBF灰狼算法优化径向基神经网络的分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 Matlab基于GWO-RBF灰狼算法优化径向基神经网络的分类预测。基于灰狼算法(GWO…

Java定时调度范式定时操作

在 Java 中&#xff0c;我们可以使用各种方法来执行定时操作。这些操作包括执行任务、调度任务、执行重复任务等。下面将介绍几种常见的 Java 定时调度范式。 1. Timer 和 TimerTask Java 提供了 Timer 和 TimerTask 类&#xff0c;用于执行定时任务。 示例代码&#xff1a;…

腾讯云服务器和阿里云服务器价格测评_2024年费用大PK

2024年阿里云服务器和腾讯云服务器价格战已经打响&#xff0c;阿里云服务器优惠61元一年起&#xff0c;腾讯云服务器61元一年&#xff0c;2核2G3M、2核4G、4核8G、4核16G、8核16G、16核32G、16核64G等配置价格对比&#xff0c;阿腾云atengyun.com整理阿里云和腾讯云服务器详细配…

基于SpringBoot+Vue+ElementUI+Mybatis前后端分离管理系统超详细教程(三)

拓展学习——用XML方式写动态SQL实现数据库更新操作 前情回顾 前一章节我们学习了使用注解方式实现后端数据库增删改查操作 基于SpringBootVueElementUIMybatis前后端分离管理系统超详细教程&#xff08;二&#xff09; 本节课程接着拓展一下用xml配置文件方式来实现对数据…

练习 6 Web [极客大挑战 2019]HardSQL

[极客大挑战 2019]HardSQL 先尝试登录&#xff0c;查看报错信息 admin 111 password 1111 登录失败admin 111 password 1’or’1 登录成功 这里直接试了万能密码成功&#xff0c;复习一下&#xff0c;第一个 ’ 是为了闭合前面的sql语句&#xff0c;最后的1后面没有 ’ 是因为…

【数学建模】层次分析代码(python)

上一篇学习了层次分析的理论&#xff0c;今天用代码实现一下吧&#xff01; 判断矩阵的一致性检验 import numpy as np A np.array([[1,2,3,5],[1/2,1,1/2,2],[1/3,2,1,2],[1/5,1/2,1/2,1]]) n A.shape[0]#获取A的行 eig_val, eig_vecnp.linalg.eig(A)#计算方阵的特征值和特…

STM32CubeMX学习笔记16--- STM32内部FLASH

1. 内部FLASH简介 之前的文章中介绍过STM32F1利用SPI与外部FLASH&#xff08;W25QXX芯片&#xff09;通讯的例程&#xff0c;本例程将介绍STM32F1的内部FLASH&#xff0c;通过内部FLASH实现数据读写操作。 不同型号的STM32&#xff0c;其FLASH容量也有所不同&#xff0c;最小的…

【产品文档分类及撰写路径】

一、产品文档的分类 产品文档根据所处阶段和面相对象的差异大致可以分为三类&#xff1a; 商业需求文档 (BRD)&#xff1a;商业需求文档是面向公司高层和项目组&#xff0c;目的是为了获得资金、资源支持。市场需求文档 (MRD)&#xff1a;市场需求文档是面向运营和市场销售人员…

基于springboot+vue的旅游管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

微服务架构中实体类模块化设计与MyBatis-Plus注解浅析

引言 在微服务开发过程中&#xff0c;为了保证代码的整洁性和可维护性&#xff0c;我们通常会将VO&#xff08;视图值对象&#xff09;、DTO&#xff08;数据传输对象&#xff09;、DO&#xff08;领域对象&#xff09;等实体类独立组织成一个API模块。这样做的目的是实现代码…

大模型相关算法模型学习

对Transformer中Add&Norm层的理解-CSDN博客 GPT模型总结【模型结构及计算过程_详细说明】_gpt结构-CSDN博客 推荐30个以上比较好的中文nlp意图识别模型源码&#xff1f;-CSDN博客 Few-shot learning&#xff08;少样本学习&#xff09;入门 - 知乎 (zhihu.com) 零次学习…

Day15:技术架构、Maven、Spring Initializer、Spring全家桶、Spring IoC

侧重于服务端&#xff08;后端&#xff09;&#xff0c;不在意前端&#xff0c;了解一些前端即可&#xff09; 技术架构 &#xff08;把Spring设计的更简单好用了就是Spring Boot&#xff09; 开发环境&#xff08;Maven&#xff09; Maven maven通过brew安装的目录为&#x…