用c语言写静态链表代码
时间: 2023-04-09 18:02:32 浏览: 94
我可以回答这个问题。以下是一个用C语言写的静态链表代码的示例:
#include <stdio.h>
#define MAXSIZE 100
typedef struct {
int data;
int next;
} Node;
Node List[MAXSIZE];
int main() {
int head, n, i, j, k;
printf("请输入链表长度:");
scanf("%d", &n);
printf("请输入链表元素:\n");
for (i = 0; i < n; i++) {
scanf("%d", &List[i].data);
List[i].next = i + 1;
}
List[n - 1].next = -1;
head = 0;
printf("链表的内容为:\n");
i = head;
while (i != -1) {
printf("%d ", List[i].data);
i = List[i].next;
}
printf("\n");
return 0;
}
相关问题
c语言静态链表代码实现
在C语言中,静态链表是一种简单的数据结构,其中节点数组在程序运行期间固定分配内存。与动态链表不同,静态链表的大小在编译时就已经确定,不适合频繁增删元素。下面是一个基本的静态单链表的实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 链表节点结构体
typedef struct StaticNode {
int data; // 节点数据
struct StaticNode* next; // 指向下一个节点的指针
} StaticListNode;
// 动态初始化一个静态链表
StaticListNode* createList(int size) {
StaticListNode* list = (StaticListNode*)malloc(size * sizeof(StaticListNode));
for (int i = 0; i < size; i++) {
list[i].data = 0;
list[i].next = &list[(i + 1) % size]; // 循环链接,最后一个节点指向第一个节点
}
list[size - 1].next = NULL;
return list;
}
// 插入节点到链表头部
void insertAtHead(StaticListNode** head, int value) {
StaticListNode* newNode = (StaticListNode*)malloc(sizeof(StaticListNode));
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
// 打印链表
void printList(StaticListNode* head) {
while (head != NULL) {
printf("%d -> ", head->data);
head = head->next;
}
printf("NULL\n");
}
int main() {
int size = 5;
StaticListNode* list = createList(size);
// 插入一些值
insertAtHead(&list, 10);
insertAtHead(&list, 20);
// 打印链表
printList(list);
return 0;
}
```
用C语言生成静态链表并加上注释
下面是一个用C语言生成静态链表的示例代码,每行代码都添加了注释以便理解:
```c
#include <stdio.h>
// 定义链表结构体
struct Node {
int data; // 数据域
int next; // 指针域,表示下一个节点的位置
};
int main() {
// 定义静态链表
struct Node list[5] = {
{1, 1}, // 第一个节点的数据为1,下一个节点的位置为1(因为是第二个节点,所以指向自己)
{2, 3}, // 第二个节点的数据为2,下一个节点的位置为3
{3, 4}, // 第三个节点的数据为3,下一个节点的位置为4
{4, 2}, // 第四个节点的数据为4,下一个节点的位置为2
{5, -1} // 第五个节点的数据为5,下一个节点的位置为-1(表示链表结束)
};
// 输出链表中的元素
int i = 0;
while (list[i].next != -1) { // 如果下一个节点的位置不是-1(即还有下一个节点)
printf("%d ", list[i].data); // 输出当前节点的数据
i = list[i].next; // 将当前节点的下一个节点作为下一次循环的当前节点
}
printf("%d\n", list[i].data); // 输出最后一个节点的数据
return 0;
}
```
这个示例代码定义了一个长度为5的静态链表,其中每个节点都包含一个数据域和一个指针域。在生成链表时,每个节点的指针域都指向下一个节点的位置,最后一个节点的指针域为-1,表示链表的结束。在遍历链表时,代码通过不断修改当前节点的指针域来遍历整个链表,并输出每个节点的数据域。
阅读全文