C语言中的链表是一种常见的数据结构,用于存储一系列的元素,但与数组不同的是,链表中的元素在内存中不是一连存储的。链表中的每个元素称为节点(Node),每个节点包罗两个部门:一部门是存储数据的数据域(Data Field),另一部门是存储指向下一个节点地址的指针域(Pointer Field)。通过这种方式,链表中的节点可以动态地增长或删除。
测试代码1:
- #include "date.h"
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <time.h>
- // 定义花的结构体。
- typedef struct {
- char name[50];
- float price;
- char origin[50];
- }Flower;
-
- // 定义链表节点的结构体。
- typedef struct Node{
- Flower flower;
- struct Node* next;
- }Node;
-
- // 创建新节点。
- Node* createNode(const char* name, float price, const char* origin) {
- Node* newNode = (Node*)malloc(sizeof(Node));
- if (newNode == NULL) {
- printf("Memory allocation failed!\n");
- exit(1);
- }
- strcpy(newNode->flower.name, name);
- newNode->flower.price = price;
- strcpy(newNode->flower.origin, origin);
- newNode->next = NULL;
- return newNode;
- }
-
- // 向链表添加节点。
- void appendNode(Node** head, const char* name, float price, const char* origin) {
- Node* newNode = createNode(name, price, origin);
- if (*head == NULL) {
- *head = newNode;
- } else {
- Node* current = *head;
- while (current->next != NULL) {
- current = current->next;
- }
- current->next = newNode;
- }
- }
-
- // 遍历链表并打印信息 。
- void traverseList(Node* head) {
- Node* current = head;
- while (current != NULL) {
- printf("Node Address: %p\n", (void*)current);
- printf("Flower Name: %s, Price: %.2f, Origin: %s\n", current->flower.name, current->flower.price, current->flower.origin);
- printf("Next Node Address: %p\n", (void*)(current->next));
- printf("\n");
- current = current->next;
- }
- }
-
- // 释放链表内存。
- void freeList(Node* head) {
- Node* temp;
- while (head != NULL) {
- temp = head;
- head = head->next;
- free(temp);
- }
- }
- int latencyTime() {
- time_t start_time, current_time;
- time(&start_time); // 获取当前时间
- do {
- time(¤t_time); // 再次获取当前时间
- } while(difftime(current_time, start_time) < 5); // 循环直到时间差达到5秒
- return 0;
- }
-
- int main() {
- int time = getTime();
- Node* head = NULL;
-
- // 向链表添加数据。
- // 向链表添加5种不同的花的信息。
- appendNode(&head, "Rose", 5.99, "China");
- appendNode(&head, "Tulip", 3.49, "Netherlands");
- appendNode(&head, "Daisy", 2.99, "Europe");
- appendNode(&head, "Lily", 4.99, "France"); // 添加第四种花
- appendNode(&head, "Orchid", 9.99, "Southeast Asia"); // 添加第五种花
-
- // 遍历链表并打印信息。
- traverseList(head);
-
- // 释放链表内存 。
- freeList(head);
- head = NULL; // 将头指针置为空,防止野指针访问
-
- return 0;
- }
复制代码 运行结果如下:
测试代码2:
- #include "date.h"
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- // 定义链表节点结构体
- typedef struct Flower {
- char name[50];
- float price;
- char origin[50];
- struct Flower* next;
- } Flower;
-
- // 创建新节点
- Flower* createNode(const char* name, float price, const char* origin) {
- Flower* newNode = (Flower*)malloc(sizeof(Flower));
- if (!newNode) {
- fprintf(stderr, "Memory allocation failed!\n");
- exit(1);
- }
- strcpy(newNode->name, name);
- newNode->price = price;
- strcpy(newNode->origin, origin);
- newNode->next = NULL;
- return newNode;
- }
-
- // 在链表末尾插入新节点
- void insertAtEnd(Flower** head, const char* name, float price, const char* origin) {
- Flower* newNode = createNode(name, price, origin);
- if (*head == NULL) {
- *head = newNode;
- } else {
- Flower* temp = *head;
- while (temp->next != NULL) {
- temp = temp->next;
- }
- temp->next = newNode;
- }
- }
-
- // 打印链表
- void printList(Flower* head) {
- Flower* temp = head;
- while (temp != NULL) {
- printf("Name: %s, Price: %.2f, Origin: %s\n", temp->name, temp->price, temp->origin);
- temp = temp->next;
- }
- }
-
- // 主函数
- int main() {
- int time = getTime();
- Flower* head = NULL; // 初始化链表为空
-
- // 向链表中添加五种花的信息
- insertAtEnd(&head, "Rose", 5.99, "China");
- insertAtEnd(&head, "Lily", 3.50, "Netherlands");
- insertAtEnd(&head, "Tulip", 4.99, "Turkey");
- insertAtEnd(&head, "Daisy", 2.99, "USA");
- insertAtEnd(&head, "Chrysanthemum", 6.99, "Japan");
-
- // 打印链表
- printList(head);
- // 释放链表内存
- Flower* temp;
- while (head != NULL) {
- temp = head;
- head = head->next;
- free(temp);
- }
- head = NULL; // 将头指针置为空,防止野指针访问
-
- return 0;
- }
复制代码 运行结果如下:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |