用C语言作出如下要求(1)初始化顺序表。 (2)在顺序表的第 i 个位置插入元素。 (3)删除顺序表的第 i 个元素。 (4)输出顺序表。 (5)判断顺序表是否为空。 (6)判断顺序表是否为满。 (7)求顺序表第 i 个元素的值。 (8)查找值为 x 的元素。 3.算法设计
时间: 2024-09-29 19:12:54 浏览: 35
在C语言中,我们可以使用结构体和指针来实现顺序表的操作。下面是一个基本的顺序表实现示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 初始化顺序表
Node* createList() {
Node* head = (Node*)malloc(sizeof(Node));
if (!head) {
printf("Memory allocation failed.\n");
return NULL;
}
head->data = 0; // 可以在此添加更多初始数据
head->next = NULL;
return head;
}
// 在第i个位置插入元素
void insertAt(int value, int position, Node** head) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
if (*head == NULL || position <= 0) { // 如果链表为空或位置非法
newNode->next = *head;
*head = newNode;
} else {
for (int i = 0; i < position - 1 && (*head != NULL); i++) {
head = &(*head)->next;
}
newNode->next = (*head)->next;
(*head)->next = newNode;
}
}
// 删除第i个元素
void deleteAt(int position, Node** head) {
if (*head == NULL || position <= 0) {
printf("Invalid operation.\n");
return;
}
Node* temp = *head;
for (int i = 0; i < position - 1 && temp != NULL; i++) {
temp = temp->next;
}
if (temp == NULL) {
printf("Element not found.\n");
return;
}
temp->next = temp->next->next;
}
// 输出顺序表
void printList(Node* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
// 判断顺序表是否为空
int isEmpty(Node* head) {
return head == NULL;
}
// 判断顺序表是否已满(这里假设每个元素占用固定大小)
int isFull(Node* head) {
// 实际应用中需要考虑实际元素数量而非单个节点的大小
// 这里仅作演示,假设列表长度为固定的数组长度
// 可以改为统计节点的实际数目
static const int MAX_SIZE = 10;
return MAX_SIZE == 0; // 非常简化的表示,实际需根据实际情况计算
}
// 求第i个元素的值
int getElement(int position, Node* head) {
if (isEmpty(head) || position <= 0) {
return -1; // 表示错误或不存在
}
for (int i = 0; i < position; i++) {
head = head->next;
}
return head->data;
}
// 查找值为x的元素
Node* find(int value, Node* head) {
while (head != NULL) {
if (head->data == value) {
return head;
}
head = head->next;
}
return NULL; // 如果未找到,则返回NULL
}
阅读全文