顺序表的应用

1. 顺序表

1.1 写法1

Linear_Opeartor2.c

#include "stdio.h"
#include "stdlib.h"
#include "stdbool.h"
#include "string.h"
//顺序表//申明顺序表的大小
#define MAXSIZE  5
typedef bool status;
//创建顺序表
int *Linear_Create()
{int *p=(int *)malloc(sizeof(int)*MAXSIZE);if(p==NULL){printf("创建顺序表失败!\n");return NULL;}//将顺序表进行清空memset(p,0,sizeof(int)*MAXSIZE);return p;
}
//判断顺序表是否已满
int Linear_Is_Full(int *p)
{//如果顺序表已满,返回-1,如果顺序表未满,返回空的位置下标for(int i=0;i<MAXSIZE;i++){if(p[i]==0){return i;}}return -1;
}
//判断顺序表是否为空
status Linear_Is_Empty(int *p)
{if(p[0]==0){printf("顺序表为空!\n");return true;}return false;
}//向顺序表中插入数据,按照顺序插入
status Linear_Insert(int *p,int data)
{//判断顺序表是否已满if(Linear_Is_Full(p)<0){printf("顺序表已满,插入失败!\n");return false;}int pos=Linear_Is_Full(p);p[pos]=data;return true;
}
//遍历顺序表
status Linear_Travel(int *p)
{if(p==NULL){printf("顺序表不存在,遍历失败!\n");return false;}for(int i=0;i<MAXSIZE;i++){printf("p[%d]=%d\n",i,*(p+i));}return true;
}
//删除顺序表中的数据
status Linear_Delete(int *arr,int *data)
{if(Linear_Is_Empty(arr)){printf("顺序表为空,删除失败!\n");return false;}if(Linear_Is_Full(arr)<0){arr[MAXSIZE-1]=0;return true;}int pos=Linear_Is_Full(arr);*data=arr[pos-1];arr[pos-1]=0;return true;
}
//在顺序表的指定位置插入数据
status Linear_Insert_Fixed_Data(int *p,int pos,int data)
{//判断顺序表是否已满if(Linear_Is_Full(p)<0){printf("顺序表已满,插入失败!\n");return false;}//判断位置是否越界if(pos<0||pos>MAXSIZE-1){printf("插入位置越界,插入失败!\n");return false;}int pos1=Linear_Is_Full(p);if(pos1==pos){p[pos]=data;return true;}if(pos1<pos){printf("插入的位置前还有空位置,插入失败!\n");return false;}if(pos1>pos){for(int i=MAXSIZE-1;i>pos;i--){p[i]=p[i-1];}p[pos]=data;return true;}}
//删除顺序表的指定位置的数据
status Linear_Delete_Fixed_Data(int *p,int pos,int *data)
{if(Linear_Is_Empty(p)){printf("顺序表为空,删除失败!\n");return false;}if(pos<0||pos>MAXSIZE-1){printf("传入的位置,超出了顺序表的大小,删除失败!\n");return false;}if(p[pos]==0){printf("传入的位置对应的数据元素为空,删除失败!\n");return false;}else{*data=p[pos];for(int i=pos;i<MAXSIZE-1;i++){p[i]=p[i+1];}p[MAXSIZE-1]=0;return true;}}
int main()
{int *arr=Linear_Create();//向顺序表中插入数据Linear_Insert(arr,10);Linear_Insert(arr,20);Linear_Insert(arr,30);Linear_Insert(arr,40);//遍历顺序表Linear_Travel(arr);printf("####################\n");Linear_Insert_Fixed_Data(arr,1,50);Linear_Travel(arr);printf("####################\n");// Linear_Insert_Fixed_Data(arr,3,60);Linear_Travel(arr);return 0;
}

1.2 写法2

Linear_Opeartor.c

#include "stdio.h"
#include "stdlib.h"
#include "stdbool.h"
#include "string.h"
//顺序表//申明顺序表的大小
#define MAXSIZE  5
typedef bool status;
//创建顺序表
int *Linear_Create()
{int *p=(int *)malloc(sizeof(int)*MAXSIZE);if(p==NULL){printf("创建顺序表失败!\n");return NULL;}//将顺序表进行清空memset(p,0,sizeof(int)*MAXSIZE);return p;
}
//判断顺序表是否已满
int Linear_Is_Full(int *p)
{//如果顺序表已满,返回-1,如果顺序表未满,返回空的位置下标for(int i=0;i<MAXSIZE;i++){if(p[i]==0){return i;}}return -1;
}
//判断顺序表是否为空
status Linear_Is_Empty(int *p)
{if(p[0]==0){printf("顺序表为空!\n");return true;}return false;
}//向顺序表中插入数据,按照顺序插入
status Linear_Insert(int *p,int data)
{//判断顺序表是否已满if(Linear_Is_Full(p)<0){printf("顺序表已满,插入失败!\n");return false;}int pos=Linear_Is_Full(p);p[pos]=data;return true;
}
//遍历顺序表
status Linear_Travel(int *p)
{if(p==NULL){printf("顺序表不存在,遍历失败!\n");return false;}for(int i=0;i<MAXSIZE;i++){printf("p[%d]=%d\n",i,*(p+i));}return true;
}
//删除顺序表中的数据
status Linear_Delete(int *arr,int *data)
{if(Linear_Is_Empty(arr)){printf("顺序表为空,删除失败!\n");return false;}if(Linear_Is_Full(arr)<0){arr[MAXSIZE-1]=0;return true;}int pos=Linear_Is_Full(arr);*data=arr[pos-1];arr[pos-1]=0;return true;
}//在任意位置插入数据
//1 2 3 4 5
status Linear_Insert_renyi(int *arr,int pos,int date){if(Linear_Is_Full(arr)<0){printf("顺序表已经满了,插入数据失败\n");return false;}int end = MAXSIZE-1;while(end>pos){arr[end] = arr[end-1];end--;}arr[pos] = date;}//在任意位置删除
//1 2 3 4 5
status Linear_delete_renyi(int *arr,int pos){if(Linear_Is_Empty(arr)){printf("顺序表为空,不能删除数据\n");return false;}int begin = pos;while(begin<MAXSIZE-1){arr[begin] = arr[begin+1];begin++;}arr[MAXSIZE-1] = 0;}int main()
{int *arr=Linear_Create();//向顺序表中插入数据Linear_Insert(arr,10);Linear_Insert(arr,20);Linear_Insert(arr,30);//遍历顺序表Linear_Travel(arr);printf("####################\n");int data;Linear_Delete(arr,&data);printf("删除的数据为:%d\n",data);Linear_Travel(arr);printf("####################\n");Linear_Insert(arr,30);Linear_Insert_renyi(arr,0,50);Linear_Insert_renyi(arr,4,70);Linear_Travel(arr);printf("####################\n");Linear_delete_renyi(arr,3);Linear_Travel(arr);return 0;
}

2. 合并两个有序的顺序表

hebingbiao.c

/*************************************************************************> File Name: hebingbiao.c> Author: lsf> Mail: lsf_2012@163.com > Created Time: 2023年10月12日 星期四 16时26分00秒************************************************************************/#include<stdio.h>//合并两个有序的顺序表void hebingshunxvbiao(int *arr3,int *arr1,int *arr2,int sz1,int sz2){int str3 = 0;int str1 = 0;int str2 = 0;while(str1<sz1 && str2<sz2){if(arr1[str1]<arr2[str2]){arr3[str3] = arr1[str1];str1++;}else{arr3[str3] = arr2[str2];str2++;}str3++;}while(str1<sz1){arr3[str3++] = arr1[str1++];}while(str2<sz2){arr3[str3++] = arr2[str2++];}}int main()
{int arr1[] = {1,5,7,9,11};int arr2[] = {1,2,4};int arr3[40];int sz1 = sizeof(arr1)/sizeof(arr1[0]);int sz2 = sizeof(arr2)/sizeof(arr2[0]);hebingshunxvbiao(arr3,arr1,arr2,sz1,sz2);int sz3 = sz1+sz2;for(int i=0;i<sz3;i++){printf("%d ",arr3[i]);}}

3. 使用链表完成一个简单的学生管理系统

student.c

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//链表
struct Node{char name[20];int age;struct Node* next;
};struct Node* L = NULL;//定义一个全局变量的头指针//新增学生
void stu_insert(){struct Node* newstu = (struct Node*)malloc(sizeof(struct Node));//录入信息printf("请输入名字:");scanf("%s",newstu->name);printf("请输入年龄:");scanf("%d",&(newstu->age));newstu->next = NULL;if(L==NULL){//如果头结点指向空,就证明该链表还买有数据L = newstu;//头指针指向新的学生数据}else{//反之链表中已经有了数据//遍历链表找到最后一个数据,将新数据追加上去struct Node* p = L;while (p->next!=NULL){p = p->next;}//到这里已经找到了最后一个数据,将新数据追加在后面p->next = newstu;}}//遍历链表
void bianli(){struct Node* p = L;//将头指针赋值给一个新的变量,防止头结点丢失if(p==NULL){printf("没有学生信息\n");return;}while(p!=NULL){printf("姓名:%s      年龄:%d\n",p->name,p->age);p = p->next;//指向下一个节点}
}//查询学生信息
struct Node * select(){char name[20];printf("请输入学生的姓名:");scanf("%s",name);struct Node* p = L;//将头指针赋值给一个新的变量,防止头结点丢失while(p!=NULL){if(strcmp(name,p->name)==0){printf("该生信息如下\n");printf("姓名:%s     年龄:%d\n",p->name,p->age);return p;}p = p->next;//指向下一个节点}printf("没有该学生\n");return NULL;
}//更改学生信息
void update(){struct Node* p = select();//先查学生if(p!=NULL){//学生存在printf("请重新录入该生信息\n");//录入信息printf("请输入名字:");scanf("%s",p->name);printf("请输入年龄:");scanf("%d",&(p->age));printf("学生信息更改成功\n");}else{printf("你要更改的学生不存在\n");}}//删除学生信息
void delete(){char name[20];printf("请输入要删除的学生得姓名:");scanf("%s",name);//双指针struct Node *pre = NULL;struct Node *cur = L;while(cur!=NULL){//遍历链表if(strcmp(name,cur->name)==0){//找到了删的人if(pre==NULL){//头结点是要删的人L = cur->next;}else{pre->next = cur->next;}printf("该生已被删除\n");free(cur);cur=NULL;return;}pre = cur;cur = cur->next;}printf("该生不存在\n");}void menu(){printf("****************************\n");printf("***1.add       2.select*****\n");printf("***3.show      4.upadte*****\n");printf("***5.delete    0.exit  *****\n");printf("****************************\n");
}int main()
{int input;do{menu();printf("请选择:");scanf("%d",&input);switch (input){case 1:stu_insert();//新增break;case 2:select();//查询break;case 3:bianli();//遍历break;case 4:update();//更改break;case 5:delete();//删除break;case 0:bianli();//遍历break;default:printf("选择错误\n");break;}}while(input);return 0;
}

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

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

相关文章

DockerFile中途执行出错的解决办法

DockerFile中途执行出错的解决办法 你们是否也曾经因为DockerFile中途执行出错,而对其束手无策?总是对docker避之不及! 但是当下载的源码运用到了docker,dockerFile 执行到一半,报错了怎么办? 现状 那么当DockerFile执行一半出错后,会产生什么结果呢? 如图可知,生成…

我们常说的流应用到底是什么?

流应用是DCloud公司开发的一种可以让手机App安装包实现边用边下的技术。基于HTML5规范的即点即用应用&#xff0c;开发者按照HTML5规范开发的应用&#xff0c;可以在支持HTML5流应用的发行渠道实现即点即用的效果。 流应用是基于 HTML5规范的即点即用应用&#xff0c;开发者按照…

Nacos注册中心客户端容灾

目前Nacos客户端有一个FailoverReactor来进行容灾文件的管理&#xff0c;可以通过在指定磁盘文件里写入容灾数据来进行客户端使用数据的覆盖。FailoverReactor目前会拦截Nacos客户端查询接口调用&#xff0c;以getAllInstances接口为例&#xff0c;目前FailoverReactor的工作流…

【合集】SpringBoot——Spring,SpringBoot,SpringCloud相关的博客文章合集

前言 本篇博客是spring相关的博客文章合集&#xff0c;内容涵盖Spring&#xff0c;SpringBoot&#xff0c;SpringCloud相关的知识&#xff0c;包括了基础的内容&#xff0c;比如核心容器&#xff0c;springMVC&#xff0c;Data Access&#xff1b;也包括Spring进阶的相关知识&…

免费的网页数据抓取工具有哪些?【2024附下载链接】

在网络上&#xff0c;有许多网页数据抓取工具可供选择。本文将探讨其如何全网采集数据并支持指定网站抓取。我们将比较不同的数据采集工具&#xff0c;帮助您找到最适合您需求的工具。 网页数据抓取工具种类 在选择网页数据抓取工具之前&#xff0c;让我们先了解一下这些工具…

TC397 EB MCAL开发从0开始系列 之 [21.2] FlsLoader配置实战 - 擦除读写Pflash

一、FlsLoader配置1、配置目标2、目标依赖2.1 硬件使用2.2 软件使用2.3 新增模块3、EB配置3.1 配置讲解3.2 模块配置3.2.1 MCU配置3.2.2 PORT配置3.2.3 FlsLoader配置3.2.5 Irq配置3.2.6 ResourceM配置4、ADS代码编写及调试<

[ 蓝桥杯Web真题 ]-布局切换

目录 介绍 准备 目标 规定 思路 解法参考 介绍 经常用手机购物的同学或许见过这种功能&#xff0c;在浏览商品列表的时候&#xff0c;我们通过点击一个小小的按钮图标&#xff0c;就能快速将数据列表在大图&#xff08;通常是两列&#xff09;和列表两种布局间来回切换。…

电机:有刷直流电机的原理

一、什么是有刷直流电机 直流有刷电机&#xff08;Brushed DC Motor&#xff09;&#xff0c;定子是用永磁铁或者线圈做成&#xff0c;以形成固定磁场。在定子一端上有固定碳刷&#xff0c;或者铜刷&#xff0c;负责把外部电流引入转子线圈。而转子是由线圈构成&#xff0c;线…

邮件营销软件:10个创新邮件营销策略,提升投资回报率(一)

电子商务和电子邮件营销密不可分。尽管电子商务在蓬勃发展&#xff0c;而很多人对邮件营销颇有微词。但是在电子商务中&#xff0c;邮件营销的确是一种有效营销方式。在本文中&#xff0c;我们将讨论一下邮件营销在电子商务中的有效运用&#xff0c;帮助您的企业在今年尽可能地…

2023-12-05 Qt学习总结6

点击 <C 语言编程核心突破> 快速C语言入门 Qt学习总结 前言十八 QMessageBox消息对话框十九 Qt布局管理总结 前言 要解决问题: 学习qt最核心知识, 多一个都不学. 十八 QMessageBox消息对话框 QMessageBox消息对话框是Qt中的一个提供用户交互界面的对话框窗口。 它通常…

MyBatis 四大核心组件之 ParameterHandler 源码解析

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

【图片版】计算机组成原理考前复习题【第2章 运算方法和运算器-1】

目录 前言 考前复习题&#xff08;必记&#xff09; 结尾 前言 在计算机组成原理的学习过程中&#xff0c;我们深入探索了计算机系统概述这一重要领域。计算机系统作为现代科技的核心&#xff0c;是整个计算机科学的基石。我们将学到的知识与理论转化为了能够解决现实问题的…

Python+unittest+requests接口自动化测试框架搭建 完整的框架搭建过程

首先配置好开发环境&#xff0c;下载安装Python并下载安装pycharm&#xff0c;在pycharm中创建项目功能目录。如果不会的可以百度Google一下&#xff0c;该内容网上的讲解还是比较多比较全的&#xff01; 大家可以先简单了解下该项目的目录结构介绍&#xff0c;后面会针对每个文…

docker 可视化工具操作说明 portainer

官网地址 https://docs.portainer.io/start/install-ce/server/docker/linux 1.First, create the volume that Port docker volume create portainer_data2.下载并安装容器 docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restartalways -v /var/run/docker…

PWN动态调试

这篇文章就是来教大家学习怎么动态调试的&#xff0c;然后我还写了一篇关于动态调试的文章&#xff0c;不是buu上面的题&#xff0c;就是两道简单的栈溢出问题&#xff0c;那两道题挺有特点的。大家可以去看看。 每日3道PWN之课外2道&#xff08;第2.5天&#xff09;-CSDN博客 …

C#暂停和恢复(Thread.Suspend()和Thread.Resume() vs AutoResetEvent()和EventWaitHandle())

目录 一、Thread.Suspend()和Thread.Resume() 二、AutoResetEvent()和EventWaitHandle() 1.AutoResetEvent() 2.EventWaitHandle() 3.示例及生成效果 一、Thread.Suspend()和Thread.Resume() 自 .NET 2.0 以后&#xff08;含&#xff09;&#xff0c;Thread.Suspend() 和…

性能监控体系:InfluxDB Grafana Prometheus

InfluxDB 简介 什么是 InfluxDB &#xff1f; InfluxDB 是一个由 InfluxData 开发的&#xff0c;开源的时序型数据库。它由 Go 语言写成&#xff0c;着力于高性能地查询与存储时序型数据。 InfluxDB 被广泛应用于存储系统的监控数据、IoT 行业的实时数据等场景。 可配合 Te…

SSD基础架构与NAND IO并发问题探讨

在我们的日常生活中&#xff0c;我们经常会遇到一些“快如闪电”的事物&#xff1a;比如那场突如其来的雨、那个突然出现在你眼前的前任、还有就是今天我们要聊的——固态硬盘&#xff08;SSD&#xff09;。 如果你是一个技术宅&#xff0c;或者对速度有着近乎偏执的追求&…

电阻知识总结与详细选型指南

目录 1. 基础知识 1.1 电阻的定义和符号 1.2 电阻的公式 1.3 电阻的串联与并联 2. 参数选型 2.1 电阻值 2.2 功率 2.3 精度 2.4 温度系数 2.5 电压系数 2.6 包装类型 2.7 耐压 2.8 特殊应用需求 2.9 环保要求 3. 产品应用 3.1 电流限制和保护 3.2 电压分压和电…

【Qt开发流程】之容器类1:介绍及常用容器类和使用Java风格迭代器进行遍历

概述 Qt库提供了一组通用的基于模板的容器类。这些类可用于存储指定类型的项。例如&#xff0c;如果需要一个可调整大小的QString数组&#xff0c;可以使用QVector<QString>。 这些容器类被设计成比STL容器更轻、更安全、更易于使用。如果不熟悉STL&#xff0c;或者更喜…