考研数据结构之C语言实现顺序表的增、删、查(粘贴即可运行)

运行效果

考研数据结构之C语言实现顺序表的增、删、查(粘贴即可运行)

 

使用IDE

考研数据结构之C语言实现顺序表的增、删、查(粘贴即可运行)

 

环境配置

考研数据结构之C语言实现顺序表的增、删、查(粘贴即可运行)

 

代码

#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");
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值