欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > C语言基础(二十)

C语言基础(二十)

2024/10/24 16:26:56 来源:https://blog.csdn.net/wehpd/article/details/141611185  浏览:    关键词:C语言基础(二十)

链表是一种常见的数据结构,通常用来存储一系列元素,每个元素由一个节点来表示。在链表中,每个节点包含两部分:数据元素本身和指向下一个节点的指针。这种结构使得链表中的元素在内存中不是连续存储的,而是通过指针连接起来。链表可以分为单向链表和双向链表两种类型。在单向链表中,每个节点只有一个指向下一个节点的指针;而在双向链表中,每个节点有一个指向前一个节点的指针和一个指向后一个节点的指针。

测试代码1:

#include "date.h"
#include <stdio.h>
#include <stdlib.h>// 定义链表节点结构
typedef struct ListNode {int val;struct ListNode* next;
} ListNode;// 创建新节点
ListNode* createNode(int val) {ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));if (newNode == NULL) {printf("Memory allocation failed!n");exit(1);}newNode->val = val;newNode->next = NULL;return newNode;
}// 在链表末尾添加节点
void appendNode(ListNode** head, int val) {ListNode* newNode = createNode(val);if (*head == NULL) {*head = newNode;} else {ListNode* temp = *head;while (temp->next != NULL) {temp = temp->next;}temp->next = newNode;}
}
// 打印链表节点地址的函数  
void printListAddress(ListNode* head) {  ListNode* current = head;  while (current != NULL) {  printf("Node value: %d, Address: %p\n", current->val, (void*)current);  current = current->next;  }  
}  // 遍历链表并打印每个节点的值
void printList(ListNode* head) {ListNode* temp = head;while (temp != NULL) {printf("%d -> ", temp->val);temp = temp->next;}printf("NULL\n");
}// 主函数
int main() {int time = getTime();ListNode* head = NULL; // 初始化链表为空// 向链表添加节点appendNode(&head, 1);appendNode(&head, 5);appendNode(&head, 0);appendNode(&head, 9);appendNode(&head, 3);appendNode(&head, 8);// 遍历并打印链表printList(head);// 打印链表节点地址printListAddress(head);// 释放链表内存ListNode* current = head;ListNode* next;while (current != NULL) {next = current->next;free(current);current = next;}head = NULL;  // 将头指针置为空,防止野指针访问return 0;
}

运行结果如下:

测试代码2:

#include "date.h"
#include <stdio.h>  
#include <stdlib.h>  // 定义链表节点结构体  
typedef struct ListNode {  int val;            // 链表节点值 struct ListNode* next; // 指针域,指向下一个节点  
} ListNode;  // 创建新节点  
ListNode* createNode(int val) {  ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));  if (newNode == NULL) {  printf("Memory allocation failed!\n");  exit(1); // 终止程序  }  newNode->val = val;  newNode->next = NULL;  return newNode;  
}  // 遍历链表并打印信息  
void printList(ListNode* head) {  ListNode* current = head;  while (current != NULL) {  printf("Node Address: %p, Value: %d, Next Node Address: %p\n",  (void*)current, current->val, (void*)(current->next));  current = current->next;  }  
}  // 主函数  
int main() { int time = getTime(); // 创建链表节点  // 创建链表节点  ListNode* head = createNode(1); // 头结点  ListNode* current = head; // 用于遍历链表的指针  // 将剩余节点添加到链表中  current->next = createNode(2);  current = current->next;  current->next = createNode(3);  current = current->next;  current->next = createNode(4);  current = current->next;  current->next = createNode(5);  // 打印链表信息  printf("Linked List:\n");  printList(head);  // 释放链表内存ListNode* temp;  while (head != NULL) {  temp = head;  head = head->next;  free(temp);  }  head = NULL;  // 将头指针置为空,防止野指针访问return 0;  
}

运行结果如下:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com