数据结构之链表(1)

 

1。实现链表的尾插

图形结构示意图 

 slist.h 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include<stdio.h>
#include<stdlib.h>
typedef int slistdate;//对int重命名,只会方便把int改成double或其他数据类型

struct slistnode
{
slistdate date;//
struct slistnode*next;//指针地址,指向下一个节点
};
typedef struct slistnode slistnode;//方便写


void slistpushback(slistnode**pphead, slistdate x);//尾插

void slistprint(slistnode*phead);

slist.c 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#define _CRT_SECURE_NO_WARNINGS 1
#include"slist.h"


void slistprint(slistnode*phead)
{
slistnode*cur = phead;
while (cur != NULL)//遍历是cur不等于空就往下走,走到尾部还不等于空,走到下一个节点,是空的
{
printf("%d->", cur->date);
cur = cur->next;//cur指向下一个指针
}
printf("NULL\n");
}


void slistpushback(slistnode**pphead, slistdate x)
{
slistnode*newnode = (slistnode*)malloc(sizeof(slistnode));// 要尾插就要动态开辟一个节点出来
newnode->date = x;//将newnode初始化
newnode->next = NULL;//next赋值为空
//那么我们这个时候要找尾
//找到尾节点的指针
if (*pphead == NULL)
{
*pphead = newnode;
}
else
{
slistnode*tail = *pphead;//我们要让tail走到尾部去,而非走到空
while (tail->next != NULL)
{
tail = tail->next;
}//找到了尾节点,链接新节点
tail->next=newnode;
}
}

 

text.c 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#define _CRT_SECURE_NO_WARNINGS 1
#include"slist.h"
//链表的概念及结构
//链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑结构是通过链表中的指针来链接


void testslist()
{
slistnode*plist = NULL;//一开始定义一个指针,但啥都没有,所以先赋值空指针
slistpushback(&plist, 1);//尾插//也要传地址才可以,实参传给形参,形参是实参的临时拷贝
slistpushback(&plist, 2);
slistpushback(&plist, 3);
slistpushback(&plist, 4);
slistprint(plist);
}
int main()
{
//需要定义一个指针指向头部
testslist();

return 0;
}


数据结构之链表(1)
http://example.com/2021/11/01/数据结构之链表(1)/
作者
Zevin
发布于
2021年11月1日
许可协议