读取文件建立顺序表实现增,删,查,取(C语言)
时间: 2023-07-18 16:22:32 浏览: 91
顺序表的建立及遍历含C语言示例.docx
好的,以下是使用顺序表实现文件读取、增删查取的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100 // 定义顺序表的最大长度
// 定义一个结构体表示顺序表
typedef struct {
int data[MAXSIZE]; // 存储数据的数组
int length; // 当前长度
} SqList;
// 初始化顺序表
void InitList(SqList *L) {
L->length = 0;
}
// 读取文件中的数据并创建顺序表
void CreateListFromFile(SqList *L, char *filename) {
FILE *fp;
fp = fopen(filename, "r");
if (fp == NULL) {
printf("文件不存在或无法打开!\n");
exit(1);
}
int num;
while (fscanf(fp, "%d", &num) != EOF) {
L->data[L->length] = num;
L->length++;
}
fclose(fp);
}
// 在顺序表中插入元素
int ListInsert(SqList *L, int pos, int elem) {
if (pos < 1 || pos > L->length + 1) {
return 0; // 插入位置不合法
}
if (L->length >= MAXSIZE) {
return 0; // 顺序表已满
}
for (int i = L->length; i >= pos; i--) {
L->data[i] = L->data[i - 1]; // 将插入位置及之后的元素后移一位
}
L->data[pos - 1] = elem; // 将要插入的元素放入插入位置
L->length++; // 长度加1
return 1; // 插入成功
}
// 在顺序表中删除元素
int ListDelete(SqList *L, int pos) {
if (pos < 1 || pos > L->length) {
return 0; // 删除位置不合法
}
for (int i = pos - 1; i < L->length - 1; i++) {
L->data[i] = L->data[i + 1]; // 将删除位置之后的元素前移一位
}
L->length--; // 长度减1
return 1; // 删除成功
}
// 在顺序表中查找元素
int ListSearch(SqList *L, int elem) {
for (int i = 0; i < L->length; i++) {
if (L->data[i] == elem) {
return i + 1; // 返回元素在顺序表中的位置
}
}
return 0; // 未找到元素
}
// 在顺序表中获取元素
int GetElem(SqList *L, int pos) {
if (pos < 1 || pos > L->length) {
return 0; // 获取位置不合法
}
return L->data[pos - 1]; // 返回获取的元素
}
// 打印顺序表中的元素
void PrintList(SqList *L) {
for (int i = 0; i < L->length; i++) {
printf("%d ", L->data[i]);
}
printf("\n");
}
int main() {
SqList L;
InitList(&L);
char filename[] = "data.txt";
CreateListFromFile(&L, filename);
printf("顺序表中的元素为:");
PrintList(&L);
int elem, pos;
printf("请输入要插入的元素和位置(用空格隔开):");
scanf("%d %d", &elem, &pos);
if (ListInsert(&L, pos, elem)) {
printf("插入成功,顺序表中的元素为:");
PrintList(&L);
} else {
printf("插入失败,插入位置不合法或顺序表已满!\n");
}
printf("请输入要删除的元素位置:");
scanf("%d", &pos);
if (ListDelete(&L, pos)) {
printf("删除成功,顺序表中的元素为:");
PrintList(&L);
} else {
printf("删除失败,删除位置不合法!\n");
}
printf("请输入要查找的元素:");
scanf("%d", &elem);
pos = ListSearch(&L, elem);
if (pos) {
printf("元素%d在顺序表中的位置为:%d\n", elem, pos);
} else {
printf("未找到元素%d!\n", elem);
}
printf("请输入要获取的元素位置:");
scanf("%d", &pos);
elem = GetElem(&L, pos);
if (elem) {
printf("第%d个元素为:%d\n", pos, elem);
} else {
printf("获取失败,位置不合法!\n");
}
return 0;
}
```
该程序可以从文件中读取数据创建顺序表,然后实现对顺序表的插入、删除、查找、获取等操作。注意,在实现插入和删除操作时,需要考虑插入位置和删除位置的合法性;在实现查找和获取操作时,需要考虑位置的合法性。
阅读全文