题目:实现顺序表各种基本运算的算法 要求: 1、建立一个顺序表,输入n个元素并输出; 2、查找线性表中的最大元素并输出; 3、在线性表的第i个元素前插入一个正整数x; 4、删除线性表中的第j个元素; 5、将线性表中的元素按升序排列; 6、将线性表中的元素就地逆序(只允许用一个暂存单元);用代码实现
时间: 2023-04-01 22:00:19 浏览: 102
毕设和企业适用springboot企业数据管理平台类及跨境电商管理平台源码+论文+视频.zip
以下是基于C语言的顺序表各种基本运算的算法实现:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 定义顺序表的最大长度
typedef struct {
int data[MAXSIZE]; // 存储顺序表的数组
int length; // 当前顺序表的长度
} SqList;
// 初始化顺序表
void InitList(SqList *L) {
L->length = ;
}
// 建立顺序表
void CreateList(SqList *L) {
int n, i;
printf("请输入顺序表的长度:");
scanf("%d", &n);
printf("请输入%d个元素:", n);
for (i = ; i < n; i++) {
scanf("%d", &L->data[i]);
}
L->length = n;
}
// 输出顺序表
void PrintList(SqList L) {
int i;
printf("顺序表中的元素为:");
for (i = ; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
// 查找线性表中的最大元素并输出
void FindMax(SqList L) {
int i, max = L.data[];
for (i = 1; i < L.length; i++) {
if (L.data[i] > max) {
max = L.data[i];
}
}
printf("线性表中的最大元素为:%d\n", max);
}
// 在线性表的第i个元素前插入一个正整数x
void InsertElem(SqList *L, int i, int x) {
int j;
if (i < 1 || i > L->length + 1) {
printf("插入位置不合法!\n");
return;
}
if (L->length >= MAXSIZE) {
printf("顺序表已满,无法插入!\n");
return;
}
for (j = L->length - 1; j >= i - 1; j--) {
L->data[j+1] = L->data[j];
}
L->data[i-1] = x;
L->length++;
printf("插入成功!\n");
}
// 删除线性表中的第j个元素
void DeleteElem(SqList *L, int j) {
int i;
if (j < 1 || j > L->length) {
printf("删除位置不合法!\n");
return;
}
for (i = j; i < L->length; i++) {
L->data[i-1] = L->data[i];
}
L->length--;
printf("删除成功!\n");
}
// 将线性表中的元素按升序排列
void SortList(SqList *L) {
int i, j, temp;
for (i = ; i < L->length - 1; i++) {
for (j = i + 1; j < L->length; j++) {
if (L->data[i] > L->data[j]) {
temp = L->data[i];
L->data[i] = L->data[j];
L->data[j] = temp;
}
}
}
printf("排序成功!\n");
}
// 将线性表中的元素就地逆序(只允许用一个暂存单元)
void ReverseList(SqList *L) {
int i, temp;
for (i = ; i < L->length / 2; i++) {
temp = L->data[i];
L->data[i] = L->data[L->length - i - 1];
L->data[L->length - i - 1] = temp;
}
printf("逆序成功!\n");
}
int main() {
SqList L;
int choice, i, x, j;
InitList(&L);
while (1) {
printf("请选择要进行的操作:\n");
printf("1.建立顺序表 2.输出顺序表 3.查找线性表中的最大元素并输出\n");
printf("4.在线性表的第i个元素前插入一个正整数x 5.删除线性表中的第j个元素\n");
printf("6.将线性表中的元素按升序排列 7.将线性表中的元素就地逆序\n");
printf(".退出程序\n");
scanf("%d", &choice);
switch (choice) {
case 1:
CreateList(&L);
break;
case 2:
PrintList(L);
break;
case 3:
FindMax(L);
break;
case 4:
printf("请输入要插入的位置和元素值:");
scanf("%d%d", &i, &x);
InsertElem(&L, i, x);
break;
case 5:
printf("请输入要删除的位置:");
scanf("%d", &j);
DeleteElem(&L, j);
break;
case 6:
SortList(&L);
break;
case 7:
ReverseList(&L);
break;
case :
exit();
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return ;
}
阅读全文