经典算法_链表

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

以上是关于经典算法_链表的主要内容,如果未能解决你的问题,请参考以下文章

经典算法学习——非循环双向链表实现冒泡排序(不带头结点)

经典算法——合并K个有序链表

java代码实现经典算法约瑟夫环(环形链表法)

C语言100个经典算法源码片段

[11道链表经典笔试题]优化的算法思想:反转链表链表相交快慢指针

数据结构链表经典算法题集锦