#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define LIST_INIT_SIZE 100
// 定义线性表元素类型
typedef int ElemType;
// 定义线性表结构体
typedef struct {
ElemType *elem; // 存储空间基址
int length; // 当前长度
} SqList;
// 初始化一个线性表
void InitList(SqList *L) {
L->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if (!L->elem) {
exit(EXIT_FAILURE); // 内存分配失败
}
L->length = 0;
}
// 创建一个包含n个正整数值的线性表
void CreateList(SqList *L, int n) {
srand(time(NULL)); // 使用当前时间作为随机种子
for (int i = 0; i < n; i++) {
L->elem[i] = rand() % 100; // 生成0到99之间的随机整数
}
L->length = n;
}
// 在第i个元素前插入一个数x
void InsertElement(SqList *L, int i, ElemType x) {
if (i < 1 || i > L->length + 1) {
printf("插入位置不合法\n");
return;
}
if (L->length >= LIST_INIT_SIZE) {
printf("线性表已满,无法插入\n");
return;
}
for (int j = L->length; j >= i; j--) {
L->elem[j] = L->elem[j - 1];
}
L->elem[i - 1] = x;
L->length++;
}
// 删除第i个元素,并输出删除元素的值
ElemType DeleteElement(SqList *L, int i) {
if (i < 1 || i > L->length) {
printf("删除位置不合法\n");
exit(EXIT_FAILURE);
}
ElemType deleted = L->elem[i - 1];
for (int j = i; j < L->length; j++) {
L->elem[j - 1] = L->elem[j];
}
L->length--;
return deleted;
}
// 查找指定元素e是否在线性表中存在,若存在返回此元素的位序,否则返回0
int LocateElement(SqList *L, ElemType e) {
for (int i = 0; i < L->length; i++) {
if (L->elem[i] == e) {
return i + 1; // 返回位序,从1开始
}
}
return 0; // 未找到
}
// 查找指定位置元素的值并输出
void GetElement(SqList *L, int i) {
if (i < 1 || i > L->length) {
printf("位置不合法\n");
return;
}
printf("第%d个元素的值是:%d\n", i, L->elem[i - 1]);
}
// 输出线性表中所有元素
void PrintList(SqList *L) {
if (L->length == 0) {
printf("线性表为空\n");
return;
}
printf("线性表内容为:");
for (int i = 0; i < L->length; i++) {
printf("%d ", L->elem[i]);
}
printf("\n");
}
int main() {
SqList list;
InitList(&list);
// 创建一个包含n个正整数值的线性表
int n;
printf("请输入线性表的长度n:");
scanf("%d", &n);
CreateList(&list, n);
// 输出初始线性表内容
printf("初始线性表内容:\n");
PrintList(&list);
int choice;
do {
printf("\n选择操作:\n");
printf("1. 插入元素\n");
printf("2. 删除元素\n");
printf("3. 查找元素\n");
printf("4. 查找位置元素\n");
printf("5. 输出线性表\n");
printf("0. 退出\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
{
int x, i;
printf("请输入要插入的元素和插入位置(用空格分隔):");
scanf("%d %d", &x, &i);
InsertElement(&list, i, x);
printf("插入后的线性表内容:\n");
PrintList(&list);
break;
}
case 2:
{
int i;
printf("请输入要删除的元素位置:");
scanf("%d", &i);
ElemType deleted = DeleteElement(&list, i);
printf("删除的元素值为:%d\n", deleted);
printf("删除后的线性表内容:\n");
PrintList(&list);
break;
}
case 3:
{
ElemType e;
printf("请输入要查找的元素值:");
scanf("%d", &e);
int position = LocateElement(&list, e);
if (position) {
printf("元素%d位于第%d个位置\n", e, position);
} else {
printf("元素%d不存在于线性表中\n", e);
}
break;
}
case 4:
{
int i;
printf("请输入要查找位置的元素位置:");
scanf("%d", &i);
GetElement(&list, i);
break;
}
case 5:
PrintList(&list);
break;
case 0:
printf("程序退出\n");
break;
default:
printf("无效的选项,请重新选择\n");
break;
}
} while (choice != 0);
// 释放线性表内存
free(list.elem);
return 0;
}
08-11
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交