运用c语言编写一个程序实现如下功能Q1实现线性表的顺序存储结构,并利用文件中的内容初始化Q2实现线性表的顺序输出、获取长度、查找、插入、删除Q3删除所有 score 低于 s 的元素 Q4将线性表内容按顺序输出到文件
时间: 2024-09-25 17:08:26 浏览: 47
C语言线性表顺序存储结构实例详解
5星 · 资源好评率100%
在C语言中,我们可以按照上述需求编写一个简单的线性表实现。这里我会给出一些基本的结构体和函数定义,但请注意,实际的完整代码会涉及到更多的细节,比如错误处理和边界检查。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义线性表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点并分配内存
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 初始化线性表
void initList(Node** head, FILE* file) {
*head = NULL;
Node* current = NULL;
// 从文件读取数据并创建节点
while(fscanf(file, "%d", ¤t->data) == 1) {
current = createNode(current->data);
if (!current) break;
current->next = *head;
*head = current;
}
if (*head == NULL) {
printf("Failed to initialize list from file.\n");
}
}
// 打印线性表
void printList(Node* head) {
Node* temp = head;
while(temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
// 线性表长度
int length(Node* head) {
int count = 0;
Node* temp = head;
while(temp != NULL) {
count++;
temp = temp->next;
}
return count;
}
// 查找元素
int search(Node* head, int key) {
Node* temp = head;
while(temp != NULL) {
if (temp->data == key)
return 1; // 成功找到
temp = temp->next;
}
return 0; // 没有找到
}
// 插入元素
void insert(Node** head, int value, int index) {
Node* newNode = createNode(value);
if (!newNode) return;
Node* prev = *head;
for (int i = 0; i < index - 1 && prev != NULL; ++i) {
prev = prev->next;
}
if (prev == NULL) {
printf("Invalid index.\n");
return;
}
newNode->next = prev->next;
prev->next = newNode;
}
// 删除所有score低于s的元素
void deleteLowScore(Node** head, int s) {
Node* temp = *head;
Node* prev = NULL;
while (temp != NULL) {
if (temp->data >= s) {
if (prev != NULL) {
prev->next = temp->next;
} else {
*head = temp->next;
}
free(temp);
} else {
prev = temp;
}
temp = temp->next;
}
}
// 将线性表内容写入文件
void saveListToFile(Node* head, const char* filename) {
FILE* outputFile = fopen(filename, "w");
if (!outputFile) {
printf("Failed to open output file.\n");
return;
}
Node* temp = head;
while (temp != NULL) {
fprintf(outputFile, "%d\n", temp->data);
temp = temp->next;
}
fclose(outputFile);
printf("Data saved to %s successfully.\n", filename);
}
// 主函数示例
int main() {
Node* head = NULL;
FILE* inputFile = fopen("input.txt", "r"); // 假设存在名为"input.txt"的文件
if (!initList(&head, inputFile)) {
return 1;
}
// 使用其他函数操作线性表...
printList(head);
return 0;
}
```
阅读全文