使用c语言,写一个线性表并能够随机存取第i个元素
时间: 2024-09-09 11:11:10 浏览: 55
在C语言中,可以使用数组结构来创建一个简单的线性表,并支持随机存取任意位置的元素。下面是一个基本的例子:
```c
#include <stdio.h>
#include <stdlib.h> // 引入malloc库用于动态内存分配
// 定义线性表节点结构体
typedef struct {
int data; // 数据域
struct Node* next; // 指针域,指向下一个节点
} Node;
// 创建新节点
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node)); // 动态分配内存
if (newNode != NULL) {
newNode->data = value;
newNode->next = NULL;
}
return newNode;
}
// 插入节点到线性表的末尾
void append(Node** head, int value) {
Node* newNode = createNode(value);
if (*head == NULL) { // 如果链表为空,直接设置头结点
*head = newNode;
return;
}
Node* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
// 随机存取第i个元素
int getRandomAccess(Node* head, int i) {
if (i >= 0 && i < indexOfLastElement(head)) {
Node* current = head;
for (int j = 0; j < i; j++) {
current = current->next;
}
return current->data;
} else {
printf("索引超出范围,无法访问。\n");
return -1; // 或者抛出错误
}
}
// 计算线性表长度
int indexOfLastElement(Node* head) {
int index = 0;
Node* current = head;
while (current != NULL) {
index++;
current = current->next;
}
return index;
}
int main() {
Node* head = NULL;
int n;
printf("请输入线性表长度: ");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int value;
printf("请输入第 %d 个元素: ", i + 1);
scanf("%d", &value);
append(&head, value);
}
int position;
printf("请输入想要访问的位置: ");
scanf("%d", &position);
int result = getRandomAccess(head, position);
if (result != -1) {
printf("第 %d 个元素的值是: %d\n", position, result);
}
return 0;
}
```
在这个示例中,我们首先定义了一个`Node`结构体来表示每个元素及其指向下一个元素的指针。然后实现了插入节点、随机访问以及计算线性表长度的功能。在`main`函数中,用户输入线性表的长度和元素值,程序会根据用户指定的索引访问相应元素。
阅读全文