请定义一个顺序表,可以对顺序表进行如下操作:
在某个位置之前插入操作的命令:I,接下来的一行是插入的组数 n,下面是n行数据,每行数据有两个值,分别代表插入位置与插入的元素值。
查找某个元素:S x,x是要查找的元素值。
当输入的命令为S时,请输出要查找元素的位置,如果没找到,请输出None 。
获取元素值:当输入的命令为 G 时,请输出获取的元素值,如果输入的元素位置不正确,输出“位置不正确(position error)” 。
遍历元素值:当输入的命令为 V 时,遍历输出所有的元素;
删除元素值:当输入的命令是 D 时,请输出被删除的那个元素值,如果表空,输出“下溢”,如果输入的位置不正确,输出“位置不正确”
当输入命令是 I 时,如果表满,输出“上溢”,如果输入的位置不正确,输出“位置不正确”
当输入的命令是 C 时,请输出被修改位置原来的值和修改后的值,如果表空,输出“下溢”,如果输入的位置不正确,输出“位置不正确”
注意,所有的元素均占一行!
测试输入:
I
2
1 1
2 2
S 2
D 1
I
2
1 3
2 4
G 2
C 2 9
V
E
预期输出:
2
1
4
4
9
3
9
2
请补全如下代码
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 20
typedef struct SeqList {
int data[MAX_SIZE];
int length;
} SeqList;
void init(SeqList *list) {
list->length = 0;
}
void get(SeqList *list, int t) {
/*该函数输出位置为t的元素的值*/
/***********Begin***********/
/************End************/
}
void locate(SeqList *list, int x) {
int count = 0;
/*该函数为查找x在顺序表中的位置,若查找成功输出该元素位置,查找失败输出"None"*/
/***********Begin***********/
/************End************/
}
void insert(SeqList *list, int t, int x) {
/*在顺序表位置t之前插入元素x*/
/***********Begin***********/
/************End************/
}
void Delete(SeqList *list, int t) {
/*删除顺序表位置为t的元素*/
/***********Begin***********/
/************End************/
}
void update(SeqList *list, int t, int x) {
/*修改位置为t的元素为x,输出原来该位置的元素和x*/
/***********Begin***********/
/************End************/
}
//输出顺序表中的元素
void printList(SeqList *list) {
for (int t = 0; t < list->length; t++) {
printf("%d\n", list->data[t]);
}
}
int main() {
char n;
int t, x, m;
SeqList d;
init(&d);
for (;;)
{
scanf(" %c", &n);
if (n == 'I') {
scanf("%d", &m);
for (int j = 0; j < m; j++) {
scanf("%d %d", &t, &x);
insert(&d, t, x);
}
} else if (n == 'S') {
scanf("%d", &x);
locate(&d, x);
} else if (n == 'G') {
scanf("%d", &t);
get(&d, t);
} else if (n == 'D') {
scanf("%d", &t);
Delete(&d, t);
} else if (n == 'C') {
scanf("%d %d", &t, &x);
update(&d, t, x);
} else if (n == 'V') {
printList(&d);
} else {
break;
}
}
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 20
typedef struct SeqList {
int data[MAX_SIZE];
int length;
} SeqList;
void init(SeqList* list) {
list->length = 0;
}
void get(SeqList* list, int t) {
/*该函数输出位置为t的元素的值*/
/***********Begin***********/
if (t<1 || t > list->length)
printf("位置不正确\n");
else
printf("%d\n", list->data[t - 1]);
/************End************/
}
void locate(SeqList* list, int x) {
int count = 0;
/*该函数为查找x在顺序表中的位置,若查找成功输出该元素位置,查找失败输出"None"*/
/***********Begin***********/
for (; count < list->length; count++)
{
if (list->data[count] == x)
{
printf("%d\n", count + 1);
return;
}
}
printf("None\n");
/************End************/
}
void insert(SeqList* list, int t, int x) {
/*在顺序表位置t之前插入元素x*/
/***********Begin***********/
int i, j;
if (list->length == MAX_SIZE)
{
printf("上溢\n");
return;
}
if (t<1 || t>list->length+1)
{
printf("插入位置错误\n");
return;
}
for (i = list->length; i >= t; i--)
list->data[i] = list->data[i - 1];
list->data[t - 1] = x;
list->length += 1;
/************End************/
}
void Delete(SeqList* list, int t) {
/*删除顺序表位置为t的元素*/
/***********Begin***********/
int i;
if (list->length <= 0)
{
printf("下溢\n");
return;
}
if (t<1 || t> list->length)
{
printf("删除位置错误\n");
return;
}
printf("%d\n", list->data[t - 1]);
for (i = t - 1; i < list->length - 1; i++)
list->data[i] = list->data[i + 1];
list->length -= 1;
/************End************/
}
void update(SeqList* list, int t, int x) {
/*修改位置为t的元素为x,输出原来该位置的元素和x*/
/***********Begin***********/
if (list->length == 0)
{
printf("下溢\n");
return;
}
if (t<1 || t> list->length)
{
printf("位置不正确\n");
return;
}
printf("%d\n%d\n", list->data[t - 1], x);
list->data[t - 1] = x;
/************End************/
}
//输出顺序表中的元素
void printList(SeqList* list) {
for (int t = 0; t < list->length; t++) {
printf("%d\n", list->data[t]);
}
}
int main() {
char n;
int t, x, m;
SeqList d;
init(&d);
for (;;)
{
scanf(" %c", &n);
if (n == 'I') {
scanf("%d", &m);
for (int j = 0; j < m; j++) {
scanf("%d %d", &t, &x);
insert(&d, t, x);
}
}
else if (n == 'S') {
scanf("%d", &x);
locate(&d, x);
}
else if (n == 'G') {
scanf("%d", &t);
get(&d, t);
}
else if (n == 'D') {
scanf("%d", &t);
Delete(&d, t);
}
else if (n == 'C') {
scanf("%d %d", &t, &x);
update(&d, t, x);
}
else if (n == 'V') {
printList(&d);
}
else {
break;
}
}
return 0;
}
引用 皆我百晓生 小程序回复内容作答:
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 20
typedef struct SeqList {
int data[MAX_SIZE];
int length;
} SeqList;
void init(SeqList *list) {
list->length = 0;
}
void get(SeqList *list, int t) {
/*该函数输出位置为t的元素的值*/
if (t >= 1 && t <= list->length) {
printf("%d\n", list->data[t-1]);
} else {
printf("位置不正确(position error)\n");
}
}
void locate(SeqList *list, int x) {
int count = 0;
/*该函数为查找x在顺序表中的位置,若查找成功输出该元素位置,查找失败输出"None"*/
for (int i = 0; i < list->length; i++) {
if (list->data[i] == x) {
printf("%d\n", i+1);
count++;
break;
}
}
if (count == 0) {
printf("None\n");
}
}
void insert(SeqList *list, int t, int x) {
/*在顺序表位置t之前插入元素x*/
if (list->length == MAX_SIZE) {
printf("上溢\n");
} else if (t < 1 || t > list->length+1) {
printf("位置不正确\n");
} else {
for (int i = list->length-1; i >= t-1; i--) {
list->data[i+1] = list->data[i];
}
list->data[t-1] = x;
list->length++;
}
}
void Delete(SeqList *list, int t) {
/*删除顺序表位置为t的元素*/
if (list->length == 0) {
printf("下溢\n");
} else if (t < 1 || t > list->length) {
printf("位置不正确\n");
} else {
int x = list->data[t-1];
for (int i = t-1; i < list->length-1; i++) {
list->data[i] = list->data[i+1];
}
list->length--;
printf("%d\n", x);
}
}
void update(SeqList *list, int t, int x) {
/*修改位置为t的元素为x,输出原来该位置的元素和x*/
if (list->length == 0) {
printf("下溢\n");
} else if (t < 1 || t > list->length) {
printf("位置不正确\n");
} else {
int original = list->data[t-1];
list->data[t-1] = x;
printf("%d %d\n", original, x);
}
}
//输出顺序表中的元素
void printList(SeqList *list) {
for (int t = 0; t < list->length; t++) {
printf("%d\n", list->data[t]);
}
}
int main() {
char n;
int t, x, m;
SeqList d;
init(&d);
for (;;)
{
scanf(" %c", &n);
if (n == 'I') {
scanf("%d", &m);
for (int j = 0; j < m; j++) {
scanf("%d %d", &t, &x);
insert(&d, t, x);
}
} else if (n == 'S') {
scanf("%d", &x);
locate(&d, x);
} else if (n == 'G') {
scanf("%d", &t);
get(&d, t);
} else if (n == 'D') {
scanf("%d", &t);
Delete(&d, t);
} else if (n == 'C') {
scanf("%d %d", &t, &x);
update(&d, t, x);
} else if (n == 'V') {
printList(&d);
} else {
break;
}
}
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!【相关推荐】