7.22数据结构——顺序表

文章目录

  • 一、思维导图
  • 二、实现顺序表的功能代码
    • head.h
    • test.c
    • main.c

一、思维导图

在这里插入图片描述

二、实现顺序表的功能代码

head.h

#ifndef __HEAD_H__
#define __HEAD_H__#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//数组的最大长度
#define MAXSIZE 5enum type
{FALUSE=-1,//用于失败返回的SUCCESS//用于成功返回的
};
//给数据元素的类型起别名
typedef int datatype;
//定义顺序表的结构体
//
typedef struct sqlist
{//数据元素datatype data[MAXSIZE];//顺序表长度:实际的元素个数 int len;
}*sqlist;//创建顺序表
sqlist create_sqlist();
//尾部插入
int insert_rear(sqlist list,datatype element);
//循环输出
int output(sqlist list);
//尾删
int delate_rear(sqlist list);
//按下标查找
int search_index(sqlist list,datatype index);
//按下标删除
int delate_index(sqlist list,datatype index);
//按下标修改
int change_index(sqlist list,int index,int element);
//按下标插入
int insert_index(sqlist list,int index,int element);
//去重
int de_weight(sqlist list);
//顺序表排序
int sort(sqlist list);
//按元素查找
int search_yuansu(sqlist list,int number);
//按元素删除
int delate_yuansu(sqlist list,int number);
//按元素修改
int change_yuansu(sqlist list,int number,int element);#endif

test.c

#include "head.h"//顺序表内存申请
sqlist create_sqlist()
{sqlist list=(sqlist)malloc(sizeof(struct sqlist));if(NULL==list){return NULL;}//堆区内存申请成功//对数据元素清0bzero(list->data,sizeof(list->data));//对顺序表长度清0list->len=0;//返回顺序表return list;
}//顺序表尾部插入
int insert_rear(sqlist list,datatype element)
{//1.判断顺序表是否为满//2.判断顺序表是否为NULLif(NULL==list||list->len==MAXSIZE){printf("sqlist full..\n");return FALUSE;}//3.在顺序表尾部插入list->data[list->len]=element;list->len++;return SUCCESS;
}//循环打印顺序表
int output(sqlist list)
{//1.判断顺序表是否为空//2.判断顺序表是否为NULLif(list==NULL||list->len==0){printf("output error...\n");return FALUSE;}//循环输出for(int i=0;i<list->len;i++){printf("%d\t",list->data[i]);}putchar(10);
}//尾删
int delate_rear(sqlist list)
{//判断顺序表是否为空//判断顺序表是否为NULLif(list==NULL||list->len==0){printf("delate_rear error..\n");return FALUSE;}//删除list->len--;return SUCCESS;
}//按下标查找
int search_index(sqlist list,datatype index)
{//判断顺序表是否为空//判断顺序表是否为NULLif(list==NULL||list->len==0||index<0||index>=list->len){printf("search_index error...\n");return FALUSE;}//输出查找的值printf("%d\n",list->data[index]);return SUCCESS;
}//按下标删除
int delate_index(sqlist list,datatype index)
{//判断顺序表是否为空//判断顺序表是否为NULL//判断是否在顺序表空间内if(list==NULL||list->len==0||index<0||index>=list->len){printf("delate_index error...\n");return FALUSE;}for(int i=index;i<list->len;i++){list->data[i]=list->data[i+1];}list->len--;return SUCCESS;
}//按下标修改
int change_index(sqlist list,int index,int element)
{//判断顺序表是否为空//判断顺序表是否为NULL//判断是否在顺序表空间内if(list==NULL||list->len==0||index<0||index>=list->len){printf("change_index error...\n");return FALUSE;}list->data[index]=element;return SUCCESS;
}//按下标插入
int insert_index(sqlist list,int index,int element)
{//判断顺序表是否为NULL//判断是否在顺序表空间内if(list==NULL||index<0||index>list->len){printf("insert_index error...\n");return FALUSE;}if(list->len==MAXSIZE){printf("内存已满无法插入\n");return FALUSE;}list->len++;for(int i=list->len;i>index;i--){list->data[i-1]=list->data[i-2];}list->data[index]=element;return SUCCESS;
}//去重
int de_weight(sqlist list)
{//判断顺序表是否为空//判断顺序表是否为NULLif(list==NULL||list->len==0){printf("de_weight error..\n");return FALUSE;}for(int i=0;i<list->len;i++){for(int j=i+1;j<list->len;j++){if(list->data[i]==list->data[j]){delate_index(list,j);j--;}}}return SUCCESS;
}//顺序表排序
int sort(sqlist list)
{//判断顺序表是否为空//判断顺序表是否为NULLif(list==NULL||list->len==0){printf("sort error..\n");return FALUSE;}for(int i=0;i<list->len-1;i++){for(int j=0;j<list->len-i-1;j++){if(list->data[j]>list->data[j+1]){int temp=list->data[j];list->data[j]=list->data[j+1];list->data[j+1]=temp;}}}return SUCCESS;
}//按元素查找
int search_yuansu(sqlist list,int number)
{//判断顺序表是否为空//判断顺序表是否为NULLif(list==NULL||list->len==0){printf("sort error..\n");return FALUSE;}for(int index=0;index<list->len;index++){if(list->data[index]==number){return index;}}return FALUSE;
}
//按元素删除
int delate_yuansu(sqlist list,int number)
{//判断顺序表是否为空//判断顺序表是否为NULLif(list==NULL||list->len==0){printf("delate_yuansu error..\n");return FALUSE;}int index=search_yuansu(list,number);delate_index(list,index);return SUCCESS;
}
//按元素修改
int change_yuansu(sqlist list,int number,int element)
{	//判断顺序表是否为空//判断顺序表是否为NULLif(list==NULL||list->len==0){printf("change_yuansu error..\n");return FALUSE;}int index=search_yuansu(list,number);change_index(list,index,element);return SUCCESS;
}

main.c

#include "head.h"
int main(int argc, const char *argv[])
{//1.定义一个顺序表sqlist list=create_sqlist();datatype element;//2.顺序表尾部插入for(int i=0;i<MAXSIZE;i++){printf("请输入一个值:");scanf("%d",&element);insert_rear(list,element);}//3.循环打印顺序表 output(list);//4.尾部删除delate_rear(list);delate_rear(list);printf("尾删之后;");output(list);//5.按下标查找	int index;printf("输入要查找的下标的值:");scanf("%d",&index);search_index(list,index);//6.按下标修改printf("输入要修改的下标:");scanf("%d",&index);printf("输入要改成的值:");scanf("%d",&element);change_index(list,index,element);output(list);//7.按下标删除printf("输入要删除值的下标:");scanf("%d",&index);delate_index(list,index);output(list);//8.按下标插入printf("输入要插入值的下标:");scanf("%d",&index);printf("输入要插入的值:");scanf("%d",&element);insert_index(list,index,element);//9.去重0de_weight(list);printf("去重后的结果:");output(list);//10.顺序表排序sort(list);printf("顺序表排序后的结果:");output(list);//11.按元素查找index=search_yuansu(list,14);printf("元素查找的下标:");printf("%d\n",index);//12.按元素删除delate_yuansu(list,14);printf("按元素删除后的结果:");output(list);//13.按元素修改change_yuansu(list,14,54);printf("按元素修改后的结果:");output(list);//14.顺序表释放内存free(list);list=NULL;return 0;
}

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

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

相关文章

【如何无限制免费试用 IDEA || Pycharm(JB 全家桶)】

如何无限制免费试用 IDEA || Pycharm(JB 全家桶) 一、目标:解决 JB 全家桶试用时长痛点 如果你是程序员,大概率用过 JetBrains 家的 IDE——IDEA 写 Java、Pycharm 写 Python、WebStorm 做前端,体验确实顶流,但官方 30 天试用到期后,动辄几千的年费实在让人肉痛。 咱…

Qt(资源库和按钮组)

这一节是对上一节的补充&#xff0c;上一节提到QLabel类和QAabstractButton类&#xff0c;这节内容&#xff1a;1.如设置资源库&#xff0c;使用资源设置图片2. 使用按钮组管理多个按钮。一、资源库1. 资源库作用Qt的资源库&#xff08;Resource System&#xff0c;.qrc文件&am…

一道检验编码能力的字符串的题目

#include<iostream> #include<vector> #include<string> using namespace std; int bNum0,gNum0; int findEnd(string& s,int si){int lens.size();//当前字母在哪个字符串中,存入comp中string comp;if(s[si]b||s[si]o||s[si]y){comp"boy";bNu…

UniApp X 网络请求避坑指南:从 JS 到 UTS 的 JSON 数据处理全解析

在 UniApp 开发中&#xff0c;我们经常需要通过 uni.request 获取服务器返回的 JSON 数据&#xff0c;并将其绑定到页面或进行逻辑处理。但在 UniApp X&#xff08;基于 UTS&#xff09; 中&#xff0c;由于引入了 强类型语言特性&#xff0c;处理 JSON 数据的方式与 JS 有明显…

iOS 网络请求常用依赖库与系统自带 API 介绍与示例

iOS 网络请求常用依赖库与系统自带 API 介绍与示例 在 iOS 开发中&#xff0c;进行网络请求是几乎所有应用都不可或缺的功能。开发者有多种选择来处理网络通信&#xff0c;从系统自带的 URLSession 到各种流行的第三方库。下面我将为您介绍 URLSession、AFNetworking、Alamofir…

JavaScript 中 let 在循环中的作用域机制解析

一、let在循环中的特殊性 let作为ES6引入的块级作用域声明&#xff0c;在循环结构中存在特殊行为&#xff0c;其核心区别于var的函数作用域特性。理解这一特性对于编写正确的闭包逻辑至关重要。 在 ECMAScript 规范里&#xff0c;let声明的变量具有块级作用域特性&#xff0c;这…

@Subscribe@AllowConcurrentEvents解析这两个注解

@Subscribe@AllowConcurrentEvents解析这两个注解 @Subscribe 和 @AllowConcurrentEvents 是 Guava EventBus(Google 开源的事件总线框架)中用于处理事件订阅的注解,主要用于实现组件间的解耦通信。下面分别解析: 1. @Subscribe 注解 作用:标记一个方法为事件订阅者方法,…

好看的小程序推广单页HTML源码 可用作导航页

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 响应式的小程序推广单页HTML源码。这个设计采用了现代化的UI元素&#xff0c;包含吸引人的标题、特性展示、二维码区域和行动号召按钮。 二、效果展示 1.部分代码 代码如下&#xff0…

华为仓颉编程语言实践体验

华为仓颉编程语言实践体验 目前华为仓颉编程语言因为其推出时间较短&#xff0c;生态系统不完善。官网资料权威&#xff0c;但比较庞大难懂。快速实验入门&#xff0c;是学习一门编程语言的法宝。网上靠谱的资料稀少&#xff0c;特此撰文介绍&#xff0c;帮助初学者减少挫折感&…

YOLOv11实战,使用YOLOv11训练自己的数据集和推理(附YOLOv11网络结构图)

2024年计算机视觉领域的颠覆性突破,YOLOv11以22%的参数量减少和0.3%的mAP提升重新定义实时目标检测的边界 本文将手把手带你完成YOLOv11的全流程实战,包含环境配置、数据准备、模型训练、推理部署及创新优化方案,并深度解析其网络架构设计思想。 一、YOLOv11核心创新解析 …

macOS xcode打包ios测试ipa应用包

可以参考&#xff1a; https://blog.csdn.net/sinat_34104446/article/details/133684756 过程中遇到很多稀奇古怪的报错&#xff0c;基本重启电脑即可解决。。。在我按照上面的步骤申请并导入新证书后&#xff0c;还遇到了一个问题&#xff1a;解决办法&#xff1a; https://b…

STM32基础知识学习笔记:ICODE、DCODE、DMA等常见名词的解释

基于AI生成内容。 ICODEICODE&#xff1a;指令总线&#xff08;Instruction Bus&#xff09; 主要用于处理 CPU 对程序指令的读取操作。它是 STM32 存储架构中重要的组成部分&#xff0c;与数据总线&#xff08;DCODE&#xff09;、系统总线&#xff08;System Bus&#xff09;…

谁将统治AI游戏时代?腾讯、网易、米哈游技术暗战

游戏行业的“产能天花板”正被AI技术轰然击穿。腾讯、网易、米哈游……所有的游戏厂商都在押注AI&#xff0c;腾讯混元发布混元游戏视觉生成平台&#xff0c;分钟级生成高精度游戏角色&#xff1b;网易《蛋仔派对》借AI实现UGC创作平民化&#xff1b;米哈游新作更以实时多模态对…

基于springboot的工商局商家管理系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…

ABP VNext + Razor 邮件模板:动态、多租户隔离、可版本化的邮件与通知系统

&#x1f680; ABP VNext Razor 邮件模板&#xff1a;动态、多租户隔离、可版本化的邮件与通知系统 &#x1f4da; 目录&#x1f680; ABP VNext Razor 邮件模板&#xff1a;动态、多租户隔离、可版本化的邮件与通知系统&#x1f31f; 一、TL;DR&#x1f4c8; 二、系统流程图…

疯狂星期四第19天运营日记

网站运营第19天&#xff0c;点击观站&#xff1a; 疯狂星期四 crazy-thursday.com 全网最全的疯狂星期四文案网站 运营报告 今日访问量 今日访问量42&#xff0c;疯狂之后的冷静&#xff0c;落差太大~~ 今日搜索引擎收录情况 必应仍然是24条记录&#xff0c;无变化 百度0收…

康养休闲旅游服务虚拟仿真实训室:赋能人才培养的创新路径

在康养休闲旅游行业数字化转型与职业教育改革的双重驱动下&#xff0c;康养休闲旅游服务虚拟仿真实训室已成为连接课堂教学与岗位实践的关键枢纽。它通过虚拟仿真技术重构康养服务场景&#xff0c;为学生打造沉浸式实践平台&#xff0c;在人才培养模式创新中发挥着不可替代的作…

python办自动化--读取邮箱中特定的邮件,并下载特定的附件

系列文章目录 python办公自动化–数据可视化&#xff08;pandasmatplotlib&#xff09;–生成条形图和饼状图 python办公自动化–数据可视化&#xff08;pandasmatplotlib&#xff09;–生成折线图 python办公自动化–数据可视化&#xff08;pandas读取excel文件&#xff0c;m…

清理DNS缓存

Cloudflarehttps://1.1.1.1/purge-cacheGooglehttps://dns.google/cacheOpenDNShttps://cachecheck.opendns.comLinux DNS缓存sudo systemd-resolve --flush-caches 或 sudo /etc/init.d/nscd restartWindows DNS缓存ipconfig /flushdnsmacOS DNS缓存sudo dscacheutil -flushca…

用 Python 写你的第一个爬虫:小白也能轻松搞定数据抓取(超详细包含最新所有Python爬虫库的教程)

用 Python 写你的第一个爬虫&#xff1a;小白也能轻松搞定数据抓取&#xff08;超详细包含最新所有Python爬虫库的教程&#xff09; 摘要 本文是一篇面向爬虫爱好者的超详细 Python 爬虫入门教程&#xff0c;涵盖了从基础到进阶的所有关键技术点&#xff1a;使用 Requests 与…