链表"/>
DAY13 链表
数组
静态数组
例子 : int nums[5] = {0}; struct person ps[5]; 缺点 : 1,无法修改地址 2,无法动态定义长度 3,占用内存过大或过小 4,增删速度慢 优点 数组的内存是连续开辟的, 所以读取速度快动态数组
例子 : int *nums = (int *) calloc(5,sizeof(int)); struct person *ps = (struct person *)calloc(5,sizeof(struct person)); 缺点 : 增删速度慢 编写代码较为复杂 优点 : 读取效率高常用的数据结构
1, 数组结构 : 内存连续开辟 , 2, 链表结构 : 离散开辟 3, 树 4, 二叉树 ( 均衡二叉树 , 非均衡二叉树 ) 5, 图链表结构
分类:
单链表
一个节点只记录下一个节点的地址
双链表
一个节点即记录下一个节点的地址,也记录上一个节点的地址
设计节点
将多个学员信息设计为链表单链表节点设计
typedef struct student
{ // 数据域 char name[50]; char sex[5]; int num; double score; // 指针域 struct student *next; }Stu;双链表节点设计
typedef struct student { // 数据域 char name[50]; char sex[5]; int num; double score; // 指针域 struct student *next; struct student *head; }Stu;总结
typedef struct 结构体名称 { // 数据域 // 指针域 } 别名 ;静态链表
#include <stdio.h> // 设计的节点 typedef struct student { // 数据域 char name[50]; char sex[5]; int num; double score; // 指针域 struct student *next; }Stu; int main(int argc, char const *argv[]) { Stu s01 = {"张三 "," 男 ",1,99,NULL}; Stu s02 = {"李四 "," 女 ",2,69,NULL}; Stu s03 = {"王五 "," 女 ",3,9,NULL}; Stu s04 = {"马六 "," 男 ",4,79,NULL}; Stu s05 = {"候七 "," 男 ",5,92,NULL}; Stu *head = &s01;//将 s01 做完首节点 s01.next = &s02;//将 s02 设置为 s01 的下一个节点 s02.next = &s03;//将 s03 设置为 s02 的下一个节点 s03.next = &s04;//将 s04 设置为 s03 的下一个节点 s04.next = &s05;//将 s05 设置为 s04 的下一个节点 // 链表的遍历 //pd 当前节点 Stu *pd = head; while(pd != NULL) { printf("%s %s %d %.2lf\n",pd->name,pd->sex,pd->num,pd->score); // 将下一个节点作为下一轮的当前节点 pd = pd->next; } return 0; }动态链表
#include <stdio.h> #include <stdlib.h> #include <string.h> // 设计的节点 typedef struct student { // 数据域 char name[50]; char sex[5]; int num; double score; // 指针域 struct student *next; }Stu; int main(int argc, char const *argv[]) { Stu *s01 = calloc(1,sizeof(Stu)); strcpy(s01->name,"张三 "); strcpy(s01->sex,"男 "); s01->num = 1; s01->score = 99; Stu *s02 = calloc(1,sizeof(Stu)); strcpy(s02->name,"张三 2"); strcpy(s02->sex,"男 "); s02->num = 1; s02->score = 99; Stu *s03 = calloc(1,sizeof(Stu)); strcpy(s03->name,"张三 3"); strcpy(s03->sex,"男 "); s03->num = 1; s03->score = 99; Stu *s04 = calloc(1,sizeof(Stu)); strcpy(s04->name,"张三 4"); strcpy(s04->sex,"男 "); s04->num = 1; s04->score = 99; Stu *s05 = calloc(1,sizeof(Stu)); strcpy(s05->name,"张三 5"); strcpy(s05->sex,"男 "); s05->num = 1; s05->score = 99; Stu *head = s01;//将 s01 做完首节点 s01->next = s02;//将 s02 设置为 s01 的下一个节点 s02->next = s03;//将 s03 设置为 s02 的下一个节点 s03->next = s04;//将 s04 设置为 s03 的下一个节点 s04->next = s05;//将 s05 设置为 s04 的下一个节点 // 链表的遍历 //pd 当前节点 Stu *pd = head; while(pd != NULL) { printf("%s %s %d %.2lf\n",pd->name,pd->sex,pd->num,pd->score); // 将下一个节点作为下一轮的当前节点 pd = pd->next; } return 0; }更多推荐
DAY13 链表
发布评论