经典算法_链表
Posted 邓戈麟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了经典算法_链表相关的知识,希望对你有一定的参考价值。
1 创建一个链表,包含在尾部插入数据和输出的函数。
头文件linknode.h
源文件
源文件main.c
源文件linknode.c
2 创建一个链表,静态模式
3 创建一个链表,动态模式
1 创建一个链表,包含在尾部插入数据和输出的函数。
头文件linknode.h
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 struct student 5 { 6 int num; 7 float score; 8 struct student *pNext; 9 }; 10 11 typedef struct student ST; 12 13 void add(ST **phead, int inum, float iscore);//函数声明,传入头结点的地址,然后插入 14 15 void showall(ST *head);//传递头结点,显示所有数据
源文件main.c
1 #define _CRT_SECURE_NO_WARNINGS 2 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include "linknode.h" 6 7 main() 8 { 9 struct student *head = NULL;//头结点指针 10 11 add(&head, 1, 70); 12 add(&head, 2, 80); 13 add(&head, 3, 90); 14 add(&head, 4, 91); 15 add(&head, 5, 92); 16 17 showall(head); 18 19 system("pause"); 20 }
源文件linknode.c
1 #include "linknode.h" 2 3 void add(ST **phead, int inum, float iscore)//函数声明,传入头结点的地址,然后插入 4 { 5 if (*phead == NULL) 6 { 7 ST *newnode = (ST *)malloc(sizeof(ST));//分配内存 8 if (newnode == NULL) 9 { 10 printf("内存分配失败"); 11 return; 12 } 13 newnode->num = inum;//结点初始化 14 newnode->score = iscore; 15 newnode->pNext = NULL; 16 17 *phead = newnode;//让头指针指向这个结点 18 } 19 else 20 { 21 //链表不为空,尾部插入 22 ST *p = *phead;//指向头结点 23 if (newnode == NULL) 24 { 25 printf("内存分配失败"); 26 return; 27 } 28 while (p->pNext != NULL)//循环到最后一个结点的地址 29 { 30 p = p->pNext; 31 } 32 ST *newnode = (ST *)malloc(sizeof(ST));//分配内存 33 newnode->num = inum;//结点初始化 34 newnode->score = iscore; 35 newnode->pNext = NULL; 36 37 p->pNext = newnode;//链接上 38 } 39 } 40 41 void showall(ST *head)//传递头结点,显示所有数据 42 { 43 while (head != NULL)//判断指针是否指向为空 44 { 45 printf("num=%d,score=%f,%x,%x\n", head->num, head->score, head, head->pNext); 46 head = head->pNext;//指针不断向前循环 47 } 48 }
2 创建一个链表,静态模式
1 #define _CRT_SECURE_NO_WARNINGS 2 3 #include <stdio.h> 4 #include <stdlib.h> 5 6 struct info 7 { 8 int num; 9 void *p; 10 }; 11 12 main() 13 { 14 struct info info1;//创建指针,静态模式 15 info1.num = 123; 16 info1.p = &info1.num;//存储地址 17 18 printf("%d,%x\n", info1.num, info1.p); 19 20 system("pause"); 21 }
3 创建一个链表,动态模式
1 #define _CRT_SECURE_NO_WARNINGS 2 3 #include <stdio.h> 4 #include <stdlib.h> 5 6 struct info 7 { 8 int num; 9 void *p; 10 }; 11 12 main() 13 { 14 struct info *pinfo;//创建指针,动态模式 15 16 pinfo = (struct info *)malloc(sizeof(struct info));//分配内存 17 18 pinfo->num = 125; 19 pinfo->p = &pinfo->num; 20 21 printf("%d,%x\n", pinfo->num, pinfo->p); 22 printf("%d,%x\n", (*pinfo).num, (*pinfo).p);//等价于上面 23 24 system("pause"); 25 }
123
以上是关于经典算法_链表的主要内容,如果未能解决你的问题,请参考以下文章