数据结构与算法(2)顺序表的初始化、插入、打印、删除、查找元素——C语言版

目录
1.前言
2.头文件的定义
3.菜单栏的设置
4.顺序表的初始化
5.添加元素
6.打印元素
7.查找元素
8.删除元素
9.插入元素
10.主函数
11.完整的代码实现

1.前言

数据结构包括三个方面

  • 逻辑结构
  • 存储结构
  • 运算

而线性表有两种典型的存储结构

  • 顺序存储结构
  • 链式存储结构

具体关系可参考上一篇博客
https://blog.csdn.net/krotox/article/details/137092821

本节我们学习的是线性表的顺序存储结构

线性表的顺序存储是指使用连续的存储空间,按照数据元素在线性表中的序号依次存储数据元素。
采用这种存储结构的线性表称为:顺序表。
(类似与数组的存储)

主要实现以下目标

  • 初始化顺序表
  • 添加元素
  • 打印元素
  • 查找元素
  • 删除元素
  • 插入元素

2.头文件的定义

#define _CRT_SECURE_NO_WARNINGS//VS2022中防止scanf返回值被忽略
//顺序表操作(顺序表是将所有的元素存放在一个一维数组里面,每个元素都连续存放,但存储方式是随机存放)
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;typedef struct SeqList
{int n;//该长度表示顺序表的实际长度int maxLength;//该长度表示顺序表的最大长度ElemType* element;//表示指针类型(动态分配)//也可表示为:ElemType element [maxLength];(静态分配)
}SeqList;SeqList sq;

2.1函数的声明

void init(SeqList* L, int maxLength);//初始化
void add(SeqList* L);//添加元素
void Print(SeqList* L);//打印元素
void Search(SeqList* L);//查找元素
void Delete(SeqList* L);//删除元素
void Insert(SeqList* L);//插入元素

3.菜单栏的设置

void menu()
{int option;printf("----顺序表的基本操作---\n");printf("----0.初始化顺序表----\n");printf("----1.添加元素--------\n");printf("----2.打印元素--------\n");printf("----3.查找元素--------\n");printf("----4.删除元素--------\n");printf("----5.插入元素--------\n");printf("请输入选择的操作:");scanf_s("%d", &option);switch (option) {case 0:init(&sq, 100);break;case 1:add(&sq);break;case 2:Print(&sq);break;case 3:Search(&sq);break;case 4:Delete(&sq);break;case 5:Insert(&sq);break;default:printf("你选择的菜单项不存在,请重新选择\n");}system("pause");//暂停,不然控制台程序会一闪即过,你来不及看到执行结果//system("cls");清屏
}

4.顺序表的初始化

void init(SeqList* L, int maxLen)
{L->maxLength = maxLen;//指定顺序表的最大长度是maxLenL->n = 0;//顺序表的实际长度为nL->element = (ElemType*)malloc(sizeof(ElemType) * maxLen);if (L->element == NULL)printf("顺序表初始化失败!\n");elseprintf("顺序表初始化成功!\n");
}
  • malloc(m)函数:开辟m字节长度的空间地址,并返回这段空间的首地址

5.添加元素

void add(SeqList* L)
{ElemType x;//定义一个变量存放输入的元素int m;//定义一个变量存放输入元素个数printf("*********添加元素*********\n");printf("请输入要添加元素的个数:");scanf("%d", &m);for (int i = 0; i < m; i++){printf("请输入要添加的元素:");scanf("%d", &x);if (L->n < L->maxLength){L->element[L->n] = x;L->n++;printf("恭喜,添加成功\n");}else if (L->n == L->maxLength){printf("该顺序表已满,无法添加元素\n");}else{printf("添加元素失败\n");}}}

6.打印元素

void Print(SeqList* L)
{ElemType i;printf("*****打印元素*****\n");if (L->n > 0){for (i = 0; i < L->n; i++){printf("%d  ", L->element[i]);}}else{printf("该顺序表是空表,无元素!\n");}
}

7.查找元素

void Search(SeqList* L)
{ElemType i, x;printf("********查找元素********\n");printf("请输入查找元素的位置:\n");scanf("%d", &x);//x是查找元素的位置if (x > L->maxLength || x < 0){printf("输入的位置超过了顺序表的长度\n");}else if (L->element[x] != NULL){printf("您查找的元素是%d", L->element[x-1]);}elseprintf("该顺序表是空表\n");}

8.删除元素

void Delete(SeqList* L)
{int i,k,x,flag=0;printf("********删除元素********\n");printf("请输入要删除元素的个数:");scanf("%d", &x);for(int s=0;s<x;s++){printf("请输入要删除元素的位置:");scanf("%d", &k);if (k < L->n){for (i = k - 1; i < L->n - 1; i++){L->element[i] = L->element[i + 1];//将后面的元素往前面移1位}L->n--;printf("恭喜您,删除成功\n");}else {printf("该位置没有元素,删除失败\n");}}
}

9.插入元素

void Insert(SeqList* L)
{int k;printf("*******插入元素*******\n");printf("请输入要插入的元素个数:\n");scanf("%d", &k);for (int i = 0; i < k; i++){int n;printf("请输入要插入元素的位置:");scanf("%d", &n);if (n<1 || n>L->maxLength){printf("抱歉,该位置超出了顺序表的范围\n");}else if (L->n == L->maxLength){printf("抱歉,顺序表已经溢出了\n");}else if (L->n < L->maxLength && n >= 1 && n <= L->n){printf("请输入要插入的元素:");int m = 0;scanf("%d", &m);int j = 0;for (j = L->n; j >= n; j--){L->element[j] = L->element[j - 1];//将前面的元素往后面移1位}L->element[n - 1] = m;L->n++;printf("恭喜您,插入成功\n");}elseprintf("插入失败\n");}
}

10.主函数

int main()
{while (1){menu();//使程序可以一直进行}return 0;
}

11.完整的代码实现

#define _CRT_SECURE_NO_WARNINGS
//顺序表操作(顺序表是将所有的元素存放在一个一维数组里面,每个元素都连续存放,但存储方式是随机存放)
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;typedef struct SeqList
{int n;//该长度表示顺序表的实际长度int maxLength;//该长度表示顺序表的最大长度ElemType* element;//表示指针类型(动态分配)//也可表示为:ElemType element [maxLength];(静态分配)
}SeqList;SeqList sq;void init(SeqList* L, int maxLength);//初始化
void add(SeqList* L);//添加元素
void Print(SeqList* L);//打印元素
void Search(SeqList* L);//查找元素
void Delete(SeqList* L);//删除元素
void Insert(SeqList* L);//插入元素void menu()
{int option;printf("----顺序表的基本操作---\n");printf("----0.初始化顺序表----\n");printf("----1.添加元素--------\n");printf("----2.打印元素--------\n");printf("----3.查找元素--------\n");printf("----4.删除元素--------\n");printf("----5.插入元素--------\n");printf("请输入选择的操作:");scanf_s("%d", &option);switch (option) {case 0:init(&sq, 100);break;case 1:add(&sq);break;case 2:Print(&sq);break;case 3:Search(&sq);break;case 4:Delete(&sq);break;case 5:Insert(&sq);break;default:printf("你选择的菜单项不存在,请重新选择\n");}system("pause");//暂停,不然控制台程序会一闪即过,你来不及看到执行结果//system("cls");清屏
}void init(SeqList* L, int maxLen)
{L->maxLength = maxLen;L->n = 0;L->element = (ElemType*)malloc(sizeof(ElemType) * maxLen);//malloc(m)函数:开辟m字节长度的空间地址,并返回这段空间的首地址if (L->element == NULL)printf("顺序表初始化失败!\n");elseprintf("顺序表初始化成功!\n");
}void add(SeqList* L)
{ElemType x;//定义一个变量存放输入的元素int m;//定义一个变量存放输入元素个数printf("*********添加元素*********\n");printf("请输入要添加元素的个数:");scanf("%d", &m);for (int i = 0; i < m; i++){printf("请输入要添加的元素:");scanf("%d", &x);if (L->n < L->maxLength){L->element[L->n] = x;L->n++;printf("恭喜,添加成功\n");}else if (L->n == L->maxLength){printf("该顺序表已满,无法添加元素\n");}else{printf("添加元素失败\n");}}}void Print(SeqList* L)
{ElemType i;printf("*****打印元素*****\n");if (L->n > 0){for (i = 0; i < L->n; i++){printf("%d  ", L->element[i]);}}else{printf("该顺序表是空表,无元素!\n");}
}void Search(SeqList* L)
{ElemType i, x;printf("********查找元素********\n");printf("请输入查找元素的位置:\n");scanf("%d", &x);//x是查找元素的位置if (x > L->maxLength || x < 0){printf("输入的位置超过了顺序表的长度\n");}else if (L->element[x] != NULL){printf("您查找的元素是%d", L->element[x-1]);}elseprintf("该顺序表是空表\n");}void Delete(SeqList* L)
{int i,k,x,flag=0;printf("********删除元素********\n");printf("请输入要删除元素的个数:");scanf("%d", &x);for(int s=0;s<x;s++){printf("请输入要删除元素的位置:");scanf("%d", &k);if (k < L->n){for (i = k - 1; i < L->n - 1; i++){L->element[i] = L->element[i + 1];//将后面的元素往前面移1位}L->n--;printf("恭喜您,删除成功\n");}else {printf("该位置没有元素,删除失败\n");}}
}void Insert(SeqList* L)
{int k;printf("*******插入元素*******\n");printf("请输入要插入的元素个数:\n");scanf("%d", &k);for (int i = 0; i < k; i++){int n;printf("请输入要插入元素的位置:");scanf("%d", &n);if (n<1 || n>L->maxLength){printf("抱歉,该位置超出了顺序表的范围\n");}else if (L->n == L->maxLength){printf("抱歉,顺序表已经溢出了\n");}else if (L->n < L->maxLength && n >= 1 && n <= L->n){printf("请输入要插入的元素:");int m = 0;scanf("%d", &m);int j = 0;for (j = L->n; j >= n; j--){L->element[j] = L->element[j - 1];//}L->element[n - 1] = m;L->n++;printf("恭喜您,插入成功\n");}elseprintf("插入失败\n");}
}int main()
{while (1){menu();}return 0;
}

编写程序,实现如下操作:

(1) 从键盘上依次输入 21、18、30、75、42、56,创建顺序表,并输出顺序表中的各元素值。
(2) 分别在顺序表的第 3 个位置和第 9 个位置插入 67 和 10,给出插入成功或失败的信息,并输出顺序表中的各元素值。
(3) 删除顺序表中的第 6 个数据元素和第 8 个数据元素,给出删除成功或失败的信息,并输出顺序表中的各元素值。

运行结果如图所示:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android客户端自动化UI自动化airtest从0到1搭建macos+脚本设计demo演示+全网最全最详细保姆级有步骤有图

iOS客户端自动化UI自动化airtest从0到1搭建macosdemo演示-CSDN博客 一、基础环境 1. 安装jdk 选择jdk8 如果下载高版本 可能不匹配会失败 下载.dmg文件 苹果电脑 &#xff5c; macOS &#xff5c; jdk1.8 &#xff5c; 环境变量配置_jdk1.8 mac-CSDN博客 Java Downloads …

【感悟《剑指offer》典型编程题的极练之路】02字符串篇!

​ 个人主页&#xff1a;秋风起&#xff0c;再归来~ 文章所属专栏&#xff1a;《剑指offer》典型编程题的极练之路 ​​​​​​ 个人格言&#xff1a;悟已往之不谏&#xff0c;知来者犹可追 克心守己&#xff0c…

2013年认证杯SPSSPRO杯数学建模B题(第一阶段)流行音乐发展简史全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 B题 流行音乐发展简史 原题再现&#xff1a; 随着互联网的发展&#xff0c;流行音乐的主要传播媒介从传统的电台和唱片逐渐过渡到网络下载和网络电台等。网络电台需要根据收听者的已知喜好&#xff0c;自动推荐并播放其它音乐。由于每个人喜好…

C语言goto语句介绍

在C语言中&#xff0c;goto语句是一种流程控制语句&#xff0c;用于无条件地转移到程序中的特定标签位置。尽管goto语句在编程中具有一定的争议&#xff0c;但在某些情况下&#xff0c;它可以提供一种简单有效的解决方案。本文将深入介绍C语言中的goto语句&#xff0c;包括其基…

5个免费的3D钣金CAD软件

如果你正在设计简单的折叠钣金零件&#xff0c;则只需设计一些具有圆角半径的法兰&#xff1a;一个简单的钣金模块。 首先&#xff0c;你可以采用老式方式绘图并以 2D 方式完成所有操作。 许多传统制造商仍在使用 2D DWG 和 DXF 图纸。 因此&#xff0c;你很有可能只需快速起草…

18.8K星开源免费的跨平台密码管理器:KeePassXC

KeePassXC&#xff1a;您的跨平台密码守护神&#xff0c;安全存储&#xff0c;随心所欲&#xff0c;无论何处皆可信手拈来! - 精选真开源&#xff0c;释放新价值。 概览 当你面临一堆应用需要填写各种各样的密码的时候、当你需要记忆各种各样的密码或是需要保存保密文件或私密…

【win10 win11添加右键】git bash

打开注册表编辑器。 按下Win键 R&#xff0c;然后输入”regedit”并按下回车键来打开注册表编辑器。计算机\HKEY_CLASSES_ROOT\Directory\Background\shell\git_bash\command2. 导航到注册表路径&#xff1a;依次展开”HKEY_CLASSES_ROOT\Directory\Background\shell”。右键…

怎样完成票据证件的关键信息抽取任务

一个不知名大学生&#xff0c;江湖人称菜狗 original author: Jacky Li Email : 3435673055qq.com Time of completion&#xff1a;2024.03.30 Last edited: 2024.03.30 目录 怎样完成票据证件的关键信息抽取任务 基于深度学习的主流方法 关键信息抽取任务流程 训练OCR模型…

用 AI 编程-释放ChatGPT的力量

最近读了本书&#xff0c;是 Sean A Williams 写的&#xff0c;感觉上还是相当不错的。一本薄薄的英文书&#xff0c;还真是写的相当好。如果你想看&#xff0c;还找不到&#xff0c;可以考虑私信我吧。 ChatGPT for Coders Unlock the Power of AI with ChatGPT: A Comprehens…

软考104-上午题-【结构化开发】-系统结构设计原则

一、系统结构设计原则 为保证总体结构设计顺利完成&#xff0c;应遵循以下几条原则。 1、分解-协调原则。整个系统是一个整体&#xff0c;具有整体目的和功能&#xff0c;但这些目的和功能的实现又是由相互联系的各个组成部分共同工作的结果。 解决复杂问题的一个很重要的原…

你该选择哪个职业呢?数据科学家、数据分析师和数据工程师

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

粉丝免费福利第一期-海浪型手机支架

&#x1f341; 作者&#xff1a;知识浅谈&#xff0c;CSDN签约讲师&#xff0c;CSDN博客专家&#xff0c;华为云云享专家&#xff0c;阿里云专家博主 &#x1f4cc; 擅长领域&#xff1a;全栈工程师&#xff0c;大模型&#xff0c;爬虫、ACM算法 &#x1f492; 公众号&#xff…

配置Web运行环境与第一个网页

目录 安装与配置Web环境: 1.下载 2.安装 3.下载插件 第一个网页: 安装与配置Web环境: 如下使用了VSC作为web的运行环境。 下面是VSC的官网点击进入:Download Visual Studio Code - Mac, Linux, Windowshttps://code.visualstudio.com/download 1.下载 进入官网后可以看到…

SpringBoot整合腾讯云邮件发送服务非STMP

SpringBoot整合腾讯云邮箱服务 1、pom配置 <!-- 腾讯云邮箱服务--><dependency><groupId>com.tencentcloudapi</groupId><artifactId>tencentcloud-sdk-java</artifactId><!-- go to https://search.maven.org/search?qtencen…

11-设计模式:Go常用设计模式概述

设计模式是啥呢&#xff1f;简单来说&#xff0c;就是将软件开发中需要重复性解决的编码场景&#xff0c;按最佳实践的方式抽象成一个模型&#xff0c;模型描述的解决方法就是设计模式。使用设计模式&#xff0c;可以使代码更易于理解&#xff0c;保证代码的重用性和可靠性。 …

动态规划之方格取数

方格取数 动态规划&#xff0c;数字三角形模型 题目链接 https://www.luogu.com.cn/problem/P1004 题目描述 解法一 O ( n 4 ) O(n^4) O(n4) #include<bits/stdc.h> using namespace std; int n, i, j, l, k, x, y, s; int d[55][55], f[55][55][55][55]; int main()…

nginx界面管理工具之nginxWebUI 搭建与使用

nginx界面管理工具之nginxWebUI 搭建与使用 一、nginxWebUI 1.nginx网页配置工具 官网地址: http://www.nginxwebui.cn 源码地址&#xff1a;https://git.chihiro.org.cn/chihiro/nginxWebUI 2.功能说明 本项目可以使用WebUI配置nginx的各项功能, 包括http协议转发, tcp协议…

CQ 社区版2.10.0 | 新增 SQL 审核、全新英文版上线…

三月中旬&#xff0c;我们预告了 CloudQuery 社区版即将上线的「SQL 审核」功能。现在&#xff0c;它来了&#xff01; 本次社区版 v2.10.0&#xff0c;除了 SQL 审核功能&#xff0c;我们还在手动授权、连接分组等模块做了新功能和优化。 新增功能 新增 SQL 审核功能 支持…

Linux编译器-gcc/g++/gdb使用

Linux编译器-gcc/g/gdb使用 一、背景知识二、 gcc如何完成2.1 预处理(进行宏替换)2.2 编译&#xff08;生成汇编&#xff09;2.3 汇编&#xff08;生成机器可识别代码&#xff09;2.4 连接&#xff08;生成可执行文件或库文件&#xff09; 三、函数库四、gcc选项五、gdb5.1 背景…

产品之美10| 小小提示词(hint),便于用户交互

最近AIGC功能火热&#xff0c;有文生图和图生图两种。当用户初次接触到文生图的时候&#xff0c;会有一刻停顿&#xff1a;我该怎用输入呢&#xff1f;这时候的hint就可以发挥作用了&#xff1a; 编辑框&#xff08;EditView)里面有可爱的小女孩&#xff0c;加风格卡通。用户看…