本文主要是介绍C语言基础(二十一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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;
}
运行结果如下:
这篇关于C语言基础(二十一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!