数据结构--顺序表的创建和增删改查操作

一、编写代码,完成学生管理系统,实现以下操作:
1、输入学生信息
2、任意位置插入学生信息
3、任意位置删除学生信息
4、查找任意位置学生信息
5、修改任意位置学生信息
6、表头插入学生信息
7、表尾插入学生信息
8、表头删除学生信息
9、表尾删除学生信息
10、去除重复学生信息
11、按名字查找学生信息
12、退出系统
二、实现过程
1、代码如下:
(1)头文件的创建
//判断头文件是否被重复引用
#ifndef _LIST_
#define _LIST_
#include <myhead.h>
//定义宏常量最大长度
#define MAX 30
//学生信息结构体
typedef struct
{int id;//学号char name[20];char major[20];//专业int age;
}student;
//顺序表结构体
typedef struct
{student data[MAX];//存储学生信息的数组int len;//统计学生个数
}list,*Plist;
//函数声明
//创建顺序表
Plist create_list();
//判断顺序表是否为满
int full(Plist);
//判断是否为空
int empty(Plist);
//输入学生信息
int input_list(Plist);
//输出学生信息
int output_list(Plist);
//插入学生信息
int insert_stu(Plist,int,student);
//按位置删除学生信息
int delete_stu(Plist,int);
//按位置查找学生信息
int inserach_stu(Plist,int);
//按位置修改学生信息
int change_stu(Plist,int,student);
//表头插入学生信息
int insert_front(Plist,student);
//表尾插入
int insert_rear(Plist,student);
//表头删除
int delete_front(Plist);
//表尾删除
int delete_rear(Plist);
//去除重复学生信息
int delete_cf(Plist);
//按姓名查找学生信息
int find_stu_all(Plist,char *);
#endif
(2)管理系统模式搭建
#include <myhead.h>
#include "list.h"
int main(int argc, const char *argv[])
{//存放操作数int n;//创建顺序表Plist L = create_list();//存储增删改查位置int pos;//存储增改的学生信息student s;//存放按姓名查找的姓名char key[20];//管理系统框架while(1){printf("\t++++++++++学生管理系统++++++++++++++++\n");printf("\t\t1、输入学生信息\n");printf("\t\t2、任意位置插入学生信息\n");printf("\t\t3、任意位置删除学生信息\n");printf("\t\t4、查找任意位置学生信息\n");printf("\t\t5、修改任意位置学生信息\n");printf("\t\t6、表头插入学生信息\n");printf("\t\t7、表尾插入学生信息\n");printf("\t\t8、表头删除学生信息\n");printf("\t\t9、表尾删除学生信息\n");printf("\t\t10、去除重复学生信息\n");printf("\t\t11、按名字查找学生信息\n");printf("\t\t12、退出系统\n");printf("\t+++++++++++++++++++++++++++++++++++++++\n");printf("请输入要执行的操作:\n");scanf("%d",&n);//switch循环判断操作数,执行对应功能switch(n){case 1:input_list(L);break;case 2:printf("请输入要插入的学生信息:");scanf("%d %s %s %d",&s.id,s.name,s.major,&s.age);printf("请输入要插入的位置:");scanf("%d",&pos);insert_stu(L,pos,s);output_list(L);break;case 3:printf("请输入要删除学生位置:");scanf("%d",&pos);delete_stu(L,pos);output_list(L);break;case 4:printf("请输入要查找的学生位置:");scanf("%d",&pos);inserach_stu(L,pos);break;case 5:printf("请输入要修改的学生信息:");scanf("%d %s %s %d",&s.id,s.name,s.major,&s.age);printf("请输入要修改的位置:");scanf("%d",&pos);change_stu(L,pos,s);output_list(L);break;case 6://表头插入printf("请输入要插入的学生信息:");scanf("%d %s %s %d",&s.id,s.name,s.major,&s.age);insert_front(L,s);output_list(L);break;case 7://表尾插入printf("请输入要插入的学生信息:");scanf("%d %s %s %d",&s.id,s.name,s.major,&s.age);insert_rear(L,s);output_list(L);break;case 8://表头删除delete_front(L);output_list(L);break;case 9://表尾删除delete_rear(L);output_list(L);break;case 10://去除重复delete_cf(L);output_list(L);break;case 11:printf("请输入学生姓名:");scanf("%s",key);find_stu_all(L,key);break;case 12:return 0;default:printf("输入有误\n");break;}}return 0;
}
(3)各功能函数的编写
#include "list.h"
Plist create_list()
{Plist L=malloc(sizeof(list));if(NULL==L){printf("申请空间失败\n");return NULL;}L->len = 0;printf("创建成功\n");return L;//返回顺序表地址
}
int input_list(Plist L)
{int n;printf("要输入的学生个数:");scanf("%d",&n);for(int i=0;i<n;i++){printf("请输入第%d个学生信息\n",i+1);printf("请输入学号:");//循环嵌套输入信息scanf("%d",&L->data[i].id);printf("请输入姓名:");scanf("%s",L->data[i].name);printf("请输入专业:");scanf("%s",L->data[i].major);printf("请输入年龄:");scanf("%d",&L->data[i].age);L->len++;}return 0;
}
//输出函数
int output_list(Plist L)
{for(int i=0;i<L->len;i++){//结构体嵌套输出printf("学号:%d\t姓名:%s\t专业:%s\t年龄:%d\n",L->data[i].id,L->data[i].name,L->data[i].major,L->data[i].age);}return 0;
}
//判满
int full(Plist L)
{if(L->len==MAX)return 1;return 0;
}
//插入函数
int insert_stu(Plist L,int pos,student s)
{int sub=pos-1;//数组下标==位置-1//判断插入位置是否正确和顺序表是否为空if(sub<1||sub>L->len||L==NULL||full(L)){printf("插入失败!\n");return -1;}//循环移动元素//从尾元素开始,到要插入位置,其他元素循环向后移动一位for(int i=L->len-1;i>=sub;i--){L->data[i+1]=L->data[i];}//插入新学生L->data[sub]=s;//长度+1L->len++;printf("插入成功\n");return 0;
}
//判断表是否为空
int empty(Plist L){if(L->len==0)return 1;return 0;
}
//删除函数
int delete_stu(Plist L,int pos)
{int sub=pos-1;//判断位置是否合法if(sub<0||sub>L->len-1||L==NULL||empty(L)){printf("删除失败\n");return -1;}//从输入位置到最后for(int i=sub;i<=L->len-1;i++){//后一个元素覆盖前一个元素,实现删除L->data[i]=L->data[i+1];}//顺序表长度-1L->len--;printf("删除成功\n");return 0;
}
//查找函数
int inserach_stu(Plist L,int pos)
{int sub=pos-1;if(sub<0||sub>L->len-1||L==NULL||empty(L)){printf("查找失败\n");return -1;}printf("该生存在\n");printf("学号:%d\t姓名:%s\t专业:%s\t年龄:%d\n",L->data[sub].id,L->data[sub].name,L->data[sub].major,L->data[sub].age);return 0;
}
//修改函数
int change_stu(Plist L,int pos,student e)
{int sub =pos-1;if(sub<0||sub>L->len-1||L==NULL||empty(L)){printf("修改失败\n");return -1;}//将修改信息直接赋值给要求位置元素L->data[sub]=e;printf("修改成功\n");return 0;
}
//表头插入
int insert_front(Plist L,student e)
{//判断顺序表是否为满if(L==NULL||full(L)){printf("插入失败\n");return -1;}//从最后元素到指定位置for(int i=L->len-1;i>=0;i--){//后一元素被前一元素覆盖,实现插入后移L->data[i+1]=L->data[i];}L->data[0]=e;L->len++;printf("表头插入成功\n");return 0;
}
//表尾插入
int insert_rear(Plist L,student e)
{if(L==NULL||full(L)){printf("表尾插入失败\n");return -1;}L->data[L->len]=e;L->len++;printf("表尾插入成功\n");return 0;
}
//表头删除
int delete_front(Plist L)
{//判断表是否为空if(L==NULL||empty(L)){printf("表头删除失败\n");return -1;}for(int i=0;i<L->len;i++){L->data[i]=L->data[i+1];}L->len--;printf("表头删除成功\n");return 0;
}
//表尾删除
int delete_rear(Plist L)
{if(L==NULL||empty(L)){printf("表尾删除失败\n");return -1;}L->data[L->len-1]=L->data[L->len];L->len--;printf("表尾删除成功\n");return 0;
}
//去除重复学生信息
int delete_cf(Plist L)
{for(int i=0;i<L->len;i++){for(int j=0;j<L->len;j++){//判断两者姓名是否相同if(strcmp(L->data[i].name,L->data[j].name)==0){//删除相同信息delete_stu(L,j+1);//指针回退,避免相同信息连续被跳过j--;}}}return 0;
}
//按照学生姓名查找信息
int find_stu_all(Plist L,char key[20])
{int sub=-1;for(int i=0;i<L->len;i++){if(strcmp(L->data[i].name,key)==0){printf("位置:%d\t是%s\n",i+1,L->data[i].name);sub=i;}}if(sub==-1){printf("查找失败,该生不存在\n");return -1;}return 0;}
2、运行结果如图所示:

 

 

 

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

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

相关文章

JVM 内存模型:堆、栈、方法区讲解

1. 引言 Java 虚拟机&#xff08;JVM&#xff09;的内存模型是 Java 程序运行时的基础之一。JVM 内存模型主要包括 堆、栈、和 方法区。它们各自有不同的作用和管理方式&#xff0c;并且影响着程序的性能和稳定性。为了更好地理解 JVM 的内存管理机制&#xff0c;我们将结合电…

CISP备考题库(八)

CISP即“注册信息安全专业人员”&#xff0c;是面向信息安全企业、信息安全咨询服务机构、信息安全测评机构、政府机构、社会各组织、团体、大专院校以及企事业单位中负责信息系统建设、运行维护和管理工作的信息安全专业人员所颁发的专业资质证书。 更多CISP介绍&#xff1a;e…

快速掌握Postman接口测试

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、前言 在前后端分离开发时&#xff0c;后端工作人员完成系统接口开发后&#xff0c;需要与前端人员对接&#xff0c;测试调试接口&#xff0c;验证接口的正…

简述混沌神经网络

混沌神经网络是一种结合了神经网络与混沌理论的新型智能信息处理系统。以下是对混沌神经网络的详细解析&#xff1a; 一、定义与背景 混沌神经网络是由于神经网络具有高度非线性动力学系统的特性&#xff0c;而混沌又具有无规则性、遍历性、随机性等特点&#xff0c;因此神经网…

豆包MarsCode IDE 搭建 VitePress 博客并使用 GitHub 部署

以下是「 豆包MarsCode 体验官」优秀文章&#xff0c;作者粥里有勺糖。 创建豆包MarsCode 项目 还没有注册登录的可以访问 www.marscode.cn/introductio… 登录并进入IDE界面 在左上角和右上角都有创建项目的入口。 选择 Node.js 项目进行创建。 创建后可以看到项目列表里只是…

monaco editor 在react中的使用

1. 首先先导入monaco editor npm install monaco-editor// npm install monaco-editor --force // 版本冲突? 强行安装 2. 在react中使用 期望效果如下 3. 我遇到的问题 : 输入json数据后 未格式化 , json数据仍然一行展示 我遇到的问题 : 直接输入json数据会白屏报错…

安卓 uniapp跨端开发

HBuilder X 4.24 本地插件方式使用原生插件 例如 MT-TTS 地址PS: 播放 speek({text: ‘test’}) 应为 播放 speak({text: ‘test’})MT-TTS下载下来之后,将 nativeplugins 文件夹拷贝到 uniapp 项目根目录中manifest.json ---- App原生插件配置 运行 语音引擎测试文字转语音播…

基于CNN的10种物体识别项目

一&#xff1a;数据导入和处理 1.导入相关包&#xff1a; import numpy as np import pandas as pd import matplotlib.pyplot as plt import tensorflow as tf2.下载数据 (x_train_all, y_train_all), (x_test, y_test) tf.keras.datasets.cifar10.load_data()# x_valid:测…

基于springboot的智慧社区微信小程序

文未可获取一份本项目的java源码和数据库参考。 本课题研究目标 本文主要对小区生活服务平台的功能和非功能需求进行了分析&#xff0c;系统除了提供物业保修、小区资讯、投诉留言、常用电话等基础功能外&#xff0c;为了满足用户的多样化需求&#xff0c;还提供邻里圈子和有…

sheng的学习笔记-AI-归纳逻辑程序设计(ILP)

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 规则学习&#xff08;rule learning&#xff09;: sheng的学习笔记-AI-规则学习&#xff08;rule learning&#xff09;-CSDN博客 一阶规则学习&#xff1a; sheng的学习笔记-AI-FOIL(First-Order Inductive Learner)-CSD…

Tiny-universe学习笔记1:Qwen-blog

本文是参与Datawhale Tiny-universe组队学习的第一篇学习笔记&#xff0c;参考链接&#xff1a;https://github.com/datawhalechina/tiny-universe Tiny-universe学习笔记1&#xff1a;Qwen-blog Qwen整体架构与Llama2类似&#xff0c;具体如下图所示&#xff1a; 其中&#…

1 elasticsearch安装

【0】官网参考 https://www.elastic.co/guide/en/elasticsearch/reference/7.11/targz.html 【1】Centos7 下载安装 【1.1】下载 官网&#xff1a;Download Elasticsearch | Elastic 选择好自己想要的相关版本即可&#xff1b; 【2】Centos7.X 前置环境配置&#xff08;uli…

C# 访问Access存取图片

图片存入ole字段&#xff0c;看有的代码是获取图片的字节数组转换为base64字符串&#xff0c;存入数据库&#xff1b;显示图片是把base64字符串转换为字节数组再显示&#xff1b;直接存字节数组可能还好一点&#xff1b; 插入的时候用带参数的sql写法比较好&#xff1b;用拼接…

汽车应用生态系统的飞跃

在过去的几年里&#xff0c;汽车系统经历了前所未有的变革&#xff0c;驾驶员和乘客对于车内体验的期待已远远超越了传统的驾驶范畴。随着技术的不断进步&#xff0c;基于Android Automotive OS&#xff08;AAOS&#xff09;和Google Automotive Services&#xff08;GAS&#…

毕业设计选题:基于ssm+vue+uniapp的农产品自主供销小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

力扣 167.两数之和||—输入为有序数组

文章目录 题目介绍解法 题目介绍 解法 利用相向双指针&#xff0c;初始时l在最用左边&#xff0c;r在最右边 1.numbers[l] numbers[r] < target 则 l 2.numbers[l] numbers[r] < target 则 r 3.numbers[l] numbers[r] target 说明找到了答案 class Solution {publi…

WPF DataGrid 单元格居中,头部居中,点击行改变背景色。

我得全局样式都写在了App.XAML文件下的ResourceDictionary里&#xff0c;方便全局引用 DataGrid样式和点击改变行背景色的触发器(BasedOn继承的是UI框架的样式&#xff0c;若无则删除&#xff0c;触发器还有鼠标移动事件等&#xff0c;按需自行修改添加) <Style x:Key&quo…

联想正式在印度生产AI服务器!致力于在印度开发世界“尖端”技术真的能实现吗?|AI日报

文章推荐 OpenAI以1500亿美元公司估值向投资者筹集65亿美元&#xff01;安卓版谷歌Gemini Live免费上线&#xff5c;AI日报 今日热点 联想集团将在印度生产AI服务器 联想集团周二宣布&#xff0c;将开始在其位于印度南部的工厂生产AI服务器&#xff0c;并在班加罗尔的科技中…

Vue3(一) Vite创建Vue3工程,选项式API与组合式API;setup的使用;Vue中的响应式ref,reactive

文章目录 一、创建Vue3工程1. vue-cli方式2. vite方式3. 项目小说明4. 安装插件&#xff1a;(1) Prettier--整理格式(2) Vue-official 二、 OptionsAPI 与 CompositionAPI1 选项式API的弊端2 组合式API的优势 三、setup1. 基本使用2 setup与组合式API3 setup语法糖 四、Vue中的…

[Redis][String][上]详细讲解

目录 0.前言1.常见命令1.SET2.GET3.MSET && MGET4.SETNX && SETXX 2.计数命令1.INCR2.INCRBY3.DECR4.DECYBY5.INCRBYFLOAT6.注意 0.前言 字符串类型是Redis最基础的数据类型&#xff0c;关于字符串需要特别注意&#xff1a; Redis中所有的键的类型都是字符串类…