用C语言设计一个程序:用菜单方式实现:(1)创建一个顺序表;(2)插入一个元素到某位置;(3)根据位置查找元素;(4)根据元素查找位置;(5)输出线性表。
时间: 2024-09-14 22:13:58 浏览: 73
设计一个具有菜单操作的C语言程序,首先需要定义顺序表的数据结构,然后实现各种操作。下面是一个简化的设计方案:
1. 定义顺序表的数据结构:
```c
#define MAX_SIZE 100 // 定义顺序表的最大长度
typedef struct {
int data[MAX_SIZE]; // 存储顺序表元素的数组
int length; // 顺序表当前长度
} SeqList;
```
2. 实现菜单操作的函数:
```c
#include <stdio.h>
#include <stdlib.h>
// 函数声明
void CreateList(SeqList *list);
void InsertElement(SeqList *list, int position, int element);
int GetElement(SeqList *list, int position);
int LocateElement(SeqList *list, int element);
void PrintList(SeqList *list);
int main() {
SeqList list;
list.length = 0; // 初始化顺序表长度为0
int choice; // 用户菜单选择变量
do {
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:
CreateList(&list);
break;
case 2:
{
int position, element;
printf("请输入位置和元素:");
scanf("%d %d", &position, &element);
InsertElement(&list, position, element);
}
break;
case 3:
{
int position;
printf("请输入位置:");
scanf("%d", &position);
int element = GetElement(&list, position);
if (element != -1) {
printf("位置 %d 的元素是:%d\n", position, element);
} else {
printf("位置无效\n");
}
}
break;
case 4:
{
int element;
printf("请输入元素:");
scanf("%d", &element);
int position = LocateElement(&list, element);
if (position != -1) {
printf("元素 %d 的位置是:%d\n", element, position);
} else {
printf("元素不存在\n");
}
}
break;
case 5:
PrintList(&list);
break;
case 0:
printf("退出程序\n");
break;
default:
printf("无效的选择,请重新输入\n");
break;
}
} while (choice != 0);
return 0;
}
// 创建顺序表
void CreateList(SeqList *list) {
int n;
printf("请输入顺序表长度:");
scanf("%d", &n);
if (n > MAX_SIZE) {
printf("超出最大长度,顺序表创建失败\n");
return;
}
printf("请输入 %d 个元素:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &list->data[i]);
}
list->length = n;
}
// 插入元素到某位置
void InsertElement(SeqList *list, int position, int element) {
if (position < 1 || position > list->length + 1) {
printf("位置无效\n");
return;
}
if (list->length == MAX_SIZE) {
printf("顺序表已满,无法插入\n");
return;
}
for (int i = list->length; i >= position; i--) {
list->data[i] = list->data[i - 1];
}
list->data[position - 1] = element;
list->length++;
}
// 根据位置查找元素
int GetElement(SeqList *list, int position) {
if (position < 1 || position > list->length) {
return -1; // 位置无效返回-1
}
return list->data[position - 1];
}
// 根据元素查找位置
int LocateElement(SeqList *list, int element) {
for (int i = 0; i < list->length; i++) {
if (list->data[i] == element) {
return i + 1;
}
}
return -1; // 元素不存在返回-1
}
// 输出顺序表
void PrintList(SeqList *list) {
if (list->length == 0) {
printf("顺序表为空\n");
return;
}
printf("顺序表元素为:");
for (int i = 0; i < list->length; i++) {
printf("%d ", list->data[i]);
}
printf("\n");
}
```
这个程序包含了顺序表的基本操作,并通过一个循环菜单让用户选择不同的操作。请注意,实际编写时,需要添加更多的错误处理和边界检查来确保程序的健壮性。
阅读全文