用C语言建立一个顺序表,用键盘输入该顺序表的值并打印
时间: 2024-03-25 07:37:14 浏览: 21
好的,以下是示例代码:
```c
#include <stdio.h>
#define MAX_SIZE 100 // 定义顺序表最大长度
typedef struct {
int data[MAX_SIZE]; // 存储数据的数组
int length; // 当前长度
} SeqList;
int main() {
SeqList list;
int i, n;
// 初始化顺序表
list.length = 0;
// 获取输入的元素个数
printf("请输入元素个数:");
scanf("%d", &n);
// 获取输入的元素值,插入到顺序表中
printf("请输入%d个元素值:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &list.data[i]);
list.length++;
}
// 打印顺序表
printf("顺序表的值为:");
for (i = 0; i < list.length; i++) {
printf("%d ", list.data[i]);
}
printf("\n");
return 0;
}
```
运行程序后,会先要求输入顺序表的元素个数,再要求输入每个元素的值,最后打印出顺序表的值。
相关问题
用c语言建立顺序表从键盘输入整数添加插入和删除元素并打印
好的,我可以为您解答这个问题。首先,我们需要定义一个顺序表的数据结构,包括表头指针、当前表长和表的最大长度:
```c
#define MAXSIZE 100 // 最大长度
typedef struct {
int data[MAXSIZE]; // 存放元素的数组
int length; // 当前表长
} SqList; // 顺序表类型定义
```
接下来,我们可以实现向表中添加元素的函数 `ListInsert`:
```c
int ListInsert(SqList *L, int i, int e) {
if (i < 1 || i > L->length + 1) { // 判断 i 的合法性
return 0;
}
if (L->length >= MAXSIZE) { // 判断表是否已满
return 0;
}
for (int j = L->length; j >= i; j--) { // 将 i 及其后面的元素后移
L->data[j] = L->data[j - 1];
}
L->data[i - 1] = e; // 将元素 e 插入到位置 i
L->length++; // 表长加 1
return 1;
}
```
接着,我们可以实现从表中删除元素的函数 `ListDelete`:
```c
int ListDelete(SqList *L, int i, int *e) {
if (i < 1 || i > L->length) { // 判断 i 的合法性
return 0;
}
*e = L->data[i - 1]; // 将要删除的元素赋值给 e
for (int j = i; j < L->length; j++) { // 将 i 及其后面的元素前移
L->data[j - 1] = L->data[j];
}
L->length--; // 表长减 1
return 1;
}
```
最后,我们可以实现打印表中所有元素的函数 `PrintList`:
```c
void PrintList(SqList L) {
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
```
下面是一个完整的程序示例,可以通过键盘输入整数来添加、插入和删除元素,并打印表中所有元素:
```c
#include <stdio.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
int ListInsert(SqList *L, int i, int e) {
if (i < 1 || i > L->length + 1) {
return 0;
}
if (L->length >= MAXSIZE) {
return 0;
}
for (int j = L->length; j >= i; j--) {
L->data[j] = L->data[j - 1];
}
L->data[i - 1] = e;
L->length++;
return 1;
}
int ListDelete(SqList *L, int i, int *e) {
if (i < 1 || i > L->length) {
return 0;
}
*e = L->data[i - 1];
for (int j = i; j < L->length; j++) {
L->data[j - 1] = L->data[j];
}
L->length--;
return 1;
}
void PrintList(SqList L) {
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
int main() {
SqList L;
L.length = 0;
int op, i, e;
while (1) {
printf("请选择操作:1.添加元素 2.插入元素 3.删除元素 4.打印元素 0.退出\n");
scanf("%d", &op);
switch (op) {
case 1:
printf("请输入要添加的元素:");
scanf("%d", &e);
ListInsert(&L, L.length + 1, e);
break;
case 2:
printf("请输入要插入的位置和元素:");
scanf("%d %d", &i, &e);
ListInsert(&L, i, e);
break;
case 3:
printf("请输入要删除的位置:");
scanf("%d", &i);
ListDelete(&L, i, &e);
printf("删除的元素为:%d\n", e);
break;
case 4:
printf("当前元素为:");
PrintList(L);
break;
case 0:
return 0;
default:
printf("输入错误,请重新输入!\n");
}
}
return 0;
}
```
希望能帮到您!
用C语言,编程实现有序顺序表的折半查找(升序和降序),键盘上输入的形式实现
以下是使用 C 语言,实现有序顺序表的折半查找的示例代码,可以根据用户输入的顺序自动判断升序或降序:
```c
#include <stdio.h>
#define MAXSIZE 100 // 定义顺序表的最大长度
// 定义顺序表结构体
typedef struct {
int data[MAXSIZE]; // 存储数据的数组
int length; // 当前顺序表的长度
} SqList;
// 初始化顺序表
void InitList(SqList *L) {
L->length = 0;
}
// 插入元素
int Insert(SqList *L, int x) {
if (L->length >= MAXSIZE) {
return 0; // 表满,插入失败
}
L->data[L->length++] = x; // 插入元素到表尾
return 1; // 插入成功
}
// 打印顺序表
void PrintList(SqList L) {
printf("当前顺序表:");
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
// 折半查找(升序)
int BinarySearchAsc(SqList L, int x) {
int low = 0, high = L.length - 1, mid;
while (low <= high) {
mid = (low + high) / 2;
if (L.data[mid] == x) {
return mid; // 查找成功,返回元素下标
} else if (L.data[mid] < x) {
low = mid + 1; // 去右边查找
} else {
high = mid - 1; // 去左边查找
}
}
return -1; // 查找失败,返回-1
}
// 折半查找(降序)
int BinarySearchDesc(SqList L, int x) {
int low = 0, high = L.length - 1, mid;
while (low <= high) {
mid = (low + high) / 2;
if (L.data[mid] == x) {
return mid; // 查找成功,返回元素下标
} else if (L.data[mid] > x) {
low = mid + 1; // 去右边查找
} else {
high = mid - 1; // 去左边查找
}
}
return -1; // 查找失败,返回-1
}
int main() {
SqList L;
InitList(&L);
// 获取用户输入的顺序表元素
int n;
printf("请输入顺序表的长度:");
scanf("%d", &n);
printf("请输入%d个有序的整数:", n);
for (int i = 0; i < n; i++) {
int x;
scanf("%d", &x);
Insert(&L, x);
}
PrintList(L);
// 获取用户输入的查找元素
int x, index;
printf("请输入要查找的元素:");
scanf("%d", &x);
// 根据顺序表是否升序来决定使用哪种折半查找算法
if (L.data[0] <= L.data[L.length - 1]) {
index = BinarySearchAsc(L, x);
} else {
index = BinarySearchDesc(L, x);
}
if (index == -1) {
printf("查找失败,元素%d不存在\n", x);
} else {
printf("查找成功,元素%d的下标为%d\n", x, index);
}
return 0;
}
```
以上代码中,我们使用了 `InitList` 函数来初始化顺序表,使用 `Insert` 函数来插入元素,使用 `PrintList` 函数来打印顺序表,使用 `BinarySearchAsc` 函数来实现升序顺序表的折半查找,使用 `BinarySearchDesc` 函数来实现降序顺序表的折半查找。然后,根据用户输入的顺序表元素的顺序来决定使用哪种折半查找算法,在查找成功或失败后,输出相应的提示信息。