#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define MAXSIZE 101
typedef int DataType;
typedef struct {
int *data;
int length;
}SeqList;
void InitList (SeqList* L) {
L->data = new int [MAXSIZE];
L->length = 0;
}
bool CreateList (SeqList* L, DataType a[], int n) {
if(n > MAXSIZE) {
printf("The space is not enough, cann't create a List\n");
return false;
} else {
for(int i = 0; i < n; i ++ ) {
L->data[i] = a[i];
}
L->length = n;
return 1;
}
}
int GetLength(SeqList* L) {
return L -> length;
}
void PrintList(SeqList* L) {
for(int i = 0; i < L->length; i ++ ) {
printf("%d%c", L->data[i], " \n"[i == L->length - 1]);
}
}
int Locate(SeqList* L, DataType value) {
for(int i = 0; i < L->length; i ++ ) {
if(L->data[i] == value) {
return i + 1;
}
}
return 0;
}
bool GetValue(SeqList* L, int idx, int* value) {
if(idx < 1 || idx > L->length) {
return false;
} else {
*value = L->data[idx - 1];
return true;
}
}
bool Insert(SeqList* L, int idx, int value) {
if(L->length >= MAXSIZE) {
return false;
} else if(idx < 1 || idx > L->length + 1) {
return false;
} else {
for(int i = L->length; i >= idx; i -- ) {
L->data[i] = L->data[i - 1];
}
L->data[idx - 1] = value;
++ L->length;
return true;
}
}
bool Delete(SeqList* L, int idx, int* value) {
if(L->length == 0) {
printf("The list is empty, delete fault\n");
return false;
} else if(idx < 1 || idx > L->length) {
printf("The index is illegal, delete fault\n");
return false;
} else {
*value = L->data[idx - 1];
for(int i = idx; i < L->length; i ++ ) {
L->data[i - 1] = L->data[i];
}
-- L->length;
return true;
}
}
bool Empty(SeqList* L) {
return (L->length == 0);
}
void erase(SeqList *L) {
delete L->data;
L->length = 0;
}
int GetPrev(SeqList *L, int idx, int *value) {
if(idx <= 1 || idx > L->length) {
return false;
} else {
*value = L->data[idx - 2];
return true;
}
}
bool GetNext(SeqList *L, int idx, int *value) {
if(idx < 1 || idx > L->length - 1) {
return false;
} else {
*value = L->data[idx];
return true;
}
}
void print() {
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");
printf(" 推出,输出一个负数!\n");
printf("注意:线性表的下标从 1 开始,线性表的最大长度是 100\n");
printf("请输入操作代码: ");
}
int main() {
SeqList L;
InitList(&L);
while(true) {
print();
int op, x, idx; scanf("%d", &op);
if(op < 0) {
printf("操作结束,再见!\n");
break;
} else if(op == 1) {
erase(&L);
} else if(op == 2) {
if(Empty(&L)) printf("线性表为空");
else printf("线性表不为空");
} else if(op == 3) {
printf("线性表的长度为: %d\n", GetLength(&L));
} else if(op == 4) {
printf("请输入要查询的位置: "); scanf("%d", &idx);
if(GetValue(&L, idx, &x)) {
printf("位于 %d 的元素是: %d\n", idx, x);
} else {
printf("查询失败,请检查输入是否合法\n");
}
} else if(op == 5){
printf("请输入要查询的位置: "); scanf("%d", &idx);
if(GetPrev(&L, idx, &x)) {
printf("位置 %d 的前驱元素是: %d\n", idx, x);
} else {
printf("查询失败,请检查输入是否合法\n");
}
} else if(op == 6){
printf("请输入要查询的位置: "); scanf("%d", &idx);
if(GetNext(&L, idx, &x)) {
printf("位置 %d 的后继元素是: %d\n", idx, x);
} else {
printf("查询失败,请检查输入是否合法\n");
}
} else if(op == 7) {
printf("请输入要插入的位置: "); scanf("%d", &idx);
printf("请输入要插入的元素: "); scanf("%d", &x);
if(Insert(&L, idx, x)) {
printf("插入成功!\n");
} else {
printf("插入失败!请检出输入是否合法\n");
}
} else if(op == 8) {
printf("请输入要删除的位置: "); scanf("%d", &idx);
if(Delete(&L, idx, &x)) {
printf("删除成功!\n 删除的位置的元素是 %d\n", x);
} else {
printf("删除失败,请检查输入是否合法\n");
}
} else if(op == 9) {
PrintList(&L);
}
Sleep(1000);
system("cls");
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现