/***********************************************
Description: 对于线性表的练习
第一部分关于线性表中的顺序存储结构的练习
本部分主要是包括对于线性表顺序存储结构的各种操作(增、删、该、查)
本次采用的数据结构为静态方式,下一节介绍动态的方式
Author: qichaoqun
Date: 2019/07/06
************************************************/
#include <stdio.h>
#include <stdlib.h>
/*定义数组的大小为 10 个 */
#define MAX_SIZE 10
/*定义本次线性表的存储的数据的类型为 int 型,并为其起一个别名*/
typedef int ElemType;
/*采用静态方式创建线性表*/
typedef struct {
//数组
ElemType data[MAX_SIZE];
//数组当前的长度
int length;
} SqlList;
/* 显示菜单 */
void showMenu();
/*增加一个元素在数组中*/
bool addElement(SqlList &sqlList);
/*删除一个元素*/
bool deleteElement2(SqlList &sqlList, int position);
/*根据位置,显示一个元素*/
void showElement(SqlList &sqlList, int position);
/*修改一个元素*/
bool updateElement(SqlList &sqlList, int position, int element);
/*将所有元素按从小到大的顺序排列输出*/
void showElementOrderByLow(SqlList &sqlList);
/*将所有元素按从大到小的顺序排列输出*/
void showElementOrderByHigh(SqlList &sqlList);
/*显示当前数组中的所有的元素*/
void showElements(SqlList &sqlList);
/*在任意位置插入一个元素*/
bool insertElement(SqlList &sqlList,int element,int position);
int main() {
//顺序表
SqlList sqlList;
sqlList.length = 0;
showMenu();
while (true) {
int option;
scanf("%d", &option);
if (option == 1) {
//添加一个元素
if (addElement(sqlList)) {
//添加成功
printf("添加元素成功\n");
} else {
//添加失败
printf("添加元素失败\n");
}
} else if (option == 2) {
int position;
printf("请输入你要删除的元素的位置 ");
scanf("%d", &position);
//删除一个元素
if (deleteElement2(sqlList, position)) {
//删除成功
printf("删除元素成功\n");
} else {
//删除失败
printf("删除元素失败\n");
}
} else if (option == 3) {
//显示元素
printf("请输入你想要显示的元素的位置 ");
int position;
scanf("%d", &position);
showElement(sqlList, position);
} else if (option == 4) {
//修改元素
printf("请输入你要修改的元素的位置和修改的内容 ");
int element;
int position;
scanf("%d", &position);
scanf("%d", &element);
if (updateElement(sqlList, position, element)) {
//修改成功
printf("修改成功\n");
} else {
//修改失败
printf("修改失败,输入的位置不合法\n");
}
} else if (option == 5) {
// 按从小到大的顺序显示
showElementOrderByLow(sqlList);
} else if (option == 6) {
//按从大到小的顺序显示
showElementOrderByHigh(sqlList);
} else if (option == 7) {
//显示所有的元素
showElements(sqlList);
} else if (option == 8) {
//在指定的位置插入一个元素
int element;
int position;
printf("请输入你要插入的元素和插入的位置 ");
scanf("%d",&element);
scanf("%d",&position);
if(insertElement(sqlList,element,position)){
printf("插入成功\n");
}else{
printf("插入失败\n");
}
} else if(option == 9){
//退出
break;
}else{
//输入不合法
printf("输入不合法,请重新输入\n");
}
showMenu();
}
return 0;
}
/*将所有元素按从大到小的顺序排列输出*/
void showElementOrderByHigh(SqlList &sqlList) {
//定义一个新的数组用来承接
SqlList newSqlList;
//将newSqlList的初始化长度置位 0
newSqlList.length = 0;
int i;
for (i = 0; i < sqlList.length; i++) {
newSqlList.data[i] = sqlList.data[i];
newSqlList.length++;
}
//将新的数组中的内容进行排序
for (int i = 0; i < newSqlList.length - 1; i++) {
for (int j = 0; j < newSqlList.length - i - 1; j++) {
if (newSqlList.data[j] < newSqlList.data[j + 1]) {
//交换位置
int temp = newSqlList.data[j];
newSqlList.data[j] = newSqlList.data[j + 1];
newSqlList.data[j + 1] = temp;
}
}
}
printf("从大到小排列为:");
for (int i = 0; i < newSqlList.length; i++) {
printf("%d ", newSqlList.data[i]);
}
printf("\n");
}
/*将所有元素按从小到大的顺序排列输出*/
void showElementOrderByLow(SqlList &sqlList) {
//定义一个新的数组用来承接
SqlList newSqlList;
newSqlList.length = 0;
for (int i = 0; i < sqlList.length; i++) {
newSqlList.data[i] = sqlList.data[i];
newSqlList.length++;
}
//将新的数组中的内容进行排序
for (int i = 0; i < newSqlList.length - 1; i++) {
for (int j = 0; j < newSqlList.length - i - 1; j++) {
if (newSqlList.data[j] > newSqlList.data[j + 1]) {
//交换位置
int temp = newSqlList.data[j];
newSqlList.data[j] = newSqlList.data[j + 1];
newSqlList.data[j + 1] = temp;
}
}
}
printf("从小到大排列为:");
for (int i = 0; i < newSqlList.length; i++) {
printf("%d ", newSqlList.data[i]);
}
printf("\n");
}
/*修改一个元素*/
bool updateElement(SqlList &sqlList, int position, int element) {
if (position < sqlList.length) {
//位置合法,允许修改
sqlList.data[position] = element;
return true;
}
return false;
}
/*显示所有的元素*/
void showElements(SqlList &sqlList) {
printf("当前的元素为:");
for (int i = 0; i < sqlList.length; i++) {
printf("%d ", sqlList.data[i]);
}
printf("\n");
}
/*根据位置,显示一个元素*/
void showElement(SqlList &sqlList, int position) {
if (position < sqlList.length) {
printf("该元素为: %d\n", sqlList.data[position]);
} else {
printf("请输入的位置不合法,重新输入\n");
}
}
/*删除一个元素*/
bool deleteElement2(SqlList &sqlList, int position) {
if (position <= sqlList.length) {
//位置合法,则进行删除
int i;
for (i = position; i < sqlList.length; i++) {
sqlList.data[i] = sqlList.data[i + 1];
}
sqlList.length--;
return true;
}
return false;
}
/*在任意位置插入一个元素*/
bool insertElement(SqlList &sqlList,int element,int position){
//判断位置是否合法
if(position < MAX_SIZE){
//判断是否还有空余位置
if(sqlList.length < MAX_SIZE){
//将元素插入到指定的位置
for (int i = position; i < sqlList.length; ++i) {
//指定位置之后的所有的元素的位置都要后移
sqlList.data[i+1] = sqlList.data[i];
}
//在该位置插入元素
sqlList.data[position] = element;
//更新数组的大小
sqlList.length++;
return true;
}else{
printf("没有空余的位置可供插入\n");
}
}else{
printf("你输入的位置不合法,请重新输入\n");
}
return false;
}
/*增加一个元素在数组中*/
bool addElement(SqlList &sqlList) {
int x;
printf("请输入你要添加的元素:");
scanf("%d", &x);
if (sqlList.length < MAX_SIZE) {
//数组中还有位置,则进行元素的添加
//并且返回添加成功
sqlList.data[sqlList.length] = x;
sqlList.length++;
return true;
}
return false;
}
/*
显示菜单
*/
void showMenu() {
printf(" 线性表的操作\n");
printf("1 添加元素\n");
printf("2 删除一个元素\n");
printf("3 显示一个元素\n");
printf("4 修改一个元素\n");
printf("5 将元素按从小到达的顺序排列\n");
printf("6 将元素按从大到小的顺序排列\n");
printf("7 显示所有的元素\n");
printf("8 在指定的位置插入一个元素\n");
printf("9 退出\n\n");
printf(" 请输入你的操作:");
}
顺序表-静态创建方式
最新推荐文章于 2022-09-17 15:48:09 发布