运行效果
使用IDE
环境配置
代码
#pragma clang diagnostic push
#pragma ide diagnostic ignored "cert-err34-c"
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <stdbool.h>
#define maxSize 50
/**
* 定义顺序表的结构体,起别名为SqlList
*/
typedef int elementType;//定义别名
typedef struct {
elementType data[maxSize];
int length;
} List;
/**
* 函数声明
*/
void initSqlList(List *L);//初始化顺序表
void printSqlList(List *L);//打印顺序表
bool insertSqlList(List *L, int i, elementType e);//在指定位置插入元素
bool deleteSqlList(List *L, int i, elementType e);//删除表中元素
int getSqlListElement(List *L, elementType e);//按值查找元素
void printMenu();//打印菜单
/**
* 主函数
*/
int main() {
List list;//定义一个顺序表
int position, element = 0;//i为元素位置,e为元素内容
int token; //定义输入令牌
initSqlList(&list);//初始化顺序表
printMenu();
scanf("%d", &token);
while (token != 0) {
if (token == 1) {
printf("请输入要插入的元素位置:\n");
scanf("%d", &position);
printf("请输入要插入的元素:\n");
scanf("%d", &element);
insertSqlList(&list, position, element);
printSqlList(&list);
printMenu();
scanf("%d", &token);
}
if (token == 2) {
printf("请输入要删除的元素位置:\n");
scanf("%d", &position);
deleteSqlList(&list, position, element);
printSqlList(&list);
printMenu();
scanf("%d", &token);
}
if (token == 3) {
printf("请输入要查找的元素值:\n");
scanf("%d", &element);
position = getSqlListElement(&list, element);
if (position > 0) {
printf("此元素在表中的第%d位\n", position);
}
printMenu();
scanf("%d", &token);
}
}
return 0;
}
/**
* 初始化顺序表
*/
void initSqlList(List *L) {
assert(L);
memset(L->data, 0, maxSize * sizeof(elementType));
L->length = 0;
printf("初始化顺序表成功!\n");
}
/**
* 打印顺序表
*/
void printSqlList(List *L) {
assert(L);
printf("当前元素为:");
for (int i = 0; i < L->length; ++i) {
printf("%d ", L->data[i]);
}
printf("\n");
}
/**
* 插入元素
*/
bool insertSqlList(List *L, int i, elementType e) {
assert(L);
//判断插入的位置是否合法
if (i < 1 || i > L->length + 1) {
printf("插入的位置不合法!\n");
return false;
}
//判断顺序表是否已经满了
if (L->length > maxSize) {
printf("表已满。。。");
return false;
}
// 将元素插入到顺序表中
for (int j = L->length; j >= i; j--) {
L->data[j] = L->data[j - 1];
}
L->data[i - 1] = e;
L->length++;
printf("插入成功!\n");
return true;
}
/**
* 删除元素
*/
bool deleteSqlList(List *L, int i, elementType e) {
//判断删除的位置是否为有效位置
if (i < 1 || i > L->length) {
printf("位置不合法\n");
return false;
}
e = L->data[i - 1];
for (int j = i; j < L->length; j++) {
L->data[j - 1] = L->data[j];
}
L->length--;
printf("删除成功!\n");
return true;
}
/**
* 按值查找元素
*/
int getSqlListElement(List *L, elementType e) {
int i;
for (i = 0; i < L->length; i++) {
if (L->data[i] == e) {
return i + 1;
}
}
printf("没有查找到相应值\n");
return 0;
}
/**
* 打印菜单
*/
void printMenu() {
printf("请选择对线性表的操作,输入“0”退出程序。\n");
printf("1.插入\n");
printf("2.删除\n");
printf("3.按值查找\n");
}