实现顺序表的基本操作: (1)构造空的顺序表; (2)建立含有若干数据元素的顺序表; (3)求表长; (4)获取第i个元素的值; (5)数据元素插入; (6)数据元素删除; (7)输出顺序表; 要求分别用函数实现上述功能,并设计主程序调用上述函数,需使用菜单。
时间: 2023-05-21 18:05:10 浏览: 111
以下是基于C语言的顺序表基本操作的实现代码:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 顺序表的最大存储容量
typedef struct{
int data[MAXSIZE]; // 存储元素的数组
int length; // 当前顺序表的长度
}SqList;
// 构造空的顺序表
void initList(SqList *L){
L->length = 0;
}
// 建立含有若干数据元素的顺序表
void createList(SqList *L){
int i = 0, n;
printf("请输入要创建的顺序表的长度:");
scanf("%d", &n);
printf("请依次输入元素值:");
while(i < n && i < MAXSIZE){
scanf("%d", &L->data[i]);
i ++;
}
L->length = i;
}
// 求表长
int getLength(SqList L){
return L.length;
}
// 获取第i个元素的值
int getElement(SqList L, int i){
if(i < 1 || i > L.length){
printf("输入的位置不合法!");
exit(1);
}
return L.data[i-1];
}
// 数据元素插入
int insertElement(SqList *L, int i, int e){
int j;
if(i < 1 || i > L->length + 1){
printf("输入的位置不合法!");
return 0;
}
if(L->length >= MAXSIZE){
printf("顺序表已满,无法插入!");
return 0;
}
for(j = L->length; j >= i; j--){
L->data[j] = L->data[j-1];
}
L->data[i-1] = e;
L->length ++;
return 1;
}
// 数据元素删除
int deleteElement(SqList *L, int i){
int j;
if(i < 1 || i > L->length){
printf("输入的位置不合法!");
return 0;
}
for(j = i; j < L->length; j++){
L->data[j-1] = L->data[j];
}
L->length --;
return 1;
}
// 输出顺序表
void printList(SqList L){
int i;
printf("顺序表的长度为:%d\n", L.length);
for(i = 0; i < L.length; i++){
printf("%d ", L.data[i]);
}
printf("\n");
}
// 主程序
int main(){
SqList L;
int choice, i, e;
initList(&L);
while(1){
printf("请输入操作选项:\n");
printf("1.构造空的顺序表\n");
printf("2.建立含有若干数据元素的顺序表\n");
printf("3.求表长\n");
printf("4.获取第i个元素的值\n");
printf("5.数据元素插入\n");
printf("6.数据元素删除\n");
printf("7.输出顺序表\n");
scanf("%d", &choice);
switch(choice){
case 1:
initList(&L);
printf("成功构造空的顺序表!\n");
break;
case 2:
createList(&L);
printf("成功建立顺序表!\n");
break;
case 3:
printf("顺序表的长度为:%d\n", getLength(L));
break;
case 4:
printf("请输入要获取的元素位置:");
scanf("%d", &i);
printf("第%d个元素的值为:%d\n", i, getElement(L, i));
break;
case 5:
printf("请输入要插入的元素位置和元素值:");
scanf("%d %d", &i, &e);
if(insertElement(&L, i, e)){
printf("元素插入成功!\n");
}
break;
case 6:
printf("请输入要删除的元素位置:");
scanf("%d", &i);
if(deleteElement(&L, i)){
printf("元素删除成功!\n");
}
break;
case 7:
printList(L);
break;
default:
printf("输入的操作选项不合法,请重新输入!\n");
break;
}
}
return 0;
}
注意:上述代码默认使用线性表中的第一个位置为1作为起始位置,而不是0。
阅读全文