2019.10.25链表1

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/KaiFcookie/article/details/102772315

typedef的用法
CASE 1

#include<stdio.h>
typedef	int ZHAGNSAN;//为int再重新多取一个名字,ZHAGNSAN等价于int
typedef struct Student
{
	int sid;
	char name[100];
	char sex;
}ST;

int main(void)
{
	int i=10;//等价于ZHANGSAN i=10;
//	ZHAGNSAN j=20;
//	printf("%d\n",j);
	struct Student st;//等价于ST st;
	struct Student *ps=&st;//等价于ST *ps;
	ST st2;
	st2.sid=200;
	printf("%d\n",st2.sid);
	return 0;
}

CASE 2

#include<stdio.h>
typedef	int ZHAGNSAN;//为int再重新多取一个名字,ZHAGNSAN等价于int
typedef struct Student
{
	int sid;
	char name[100];
	char sex;
}*PST;	//PST等价于struct Student *

int main(void)
{
	struct Student st;//等价于ST st;
	PST ps=&st;
	ps->sid=99;
	printf("%d\n",ps->sid);
	return 0;
}

CASE 3

#include<stdio.h>
typedef	int ZHAGNSAN;//为int再重新多取一个名字,ZHAGNSAN等价于int
typedef struct Student
{
	int sid;
	char name[100];
	char sex;
}*PSTU,STU;	//PSTU等价于struct Student *,STU代表了struct Student

int main(void)
{
	STU st;//相当于struct Srudent st;
	PSTU ps=&st;//相当于struct Srudent *ps=&st;
	ps->sid=99;
	printf("%d\n",ps->sid);
	return 0;
}


链表的定义
定义:
n个节点离散分配;彼此通过指针相连;每个节点只有一个后续节点,首节点没有前驱节点,尾节点没有后续节点。
专业术语:
首节点:第一个有效节点
尾节点:最后一个有效节点
头节点:头节点的数据类型和首节点的数据类型相同。第一个有效节点之前的那个节点;头节点并不存放存放有效数据;加头节点的目主要是为了方便对链表的操作。
头指针:指向头节点的指针变量
尾指针:指向尾节点的指针变量
头节点-首节点。。。。。。尾节点【头节点并没有存储有效数据,也没有存放链表中有效节点的个数。首节点开始存放有效数据。在链表前边加一个没有实际意义的头节点,可以方便对链表的操作。头节点于之后节点的数据类型相同】

如果希望通过一个函数来对链表进行处理,我们至少需要接受链表的哪些参数
如果希望通过一个函数来对链表进行处理,我们至少需要接受链表的哪些参数
只需要一个参数:头指针
因为我们通过头指针可以推算出链表的其他所有参数

每一个链表节点的数据类型该如何表示的问题

CASE 1

#include<stdio.h>

typedef struct Node
{
	int data;//数据域
	struct Node * pNext;//指针域
}NODE,*PNODE;//NODE等价于struct Node,PNODE等价于struct Node *
int main(void)
{
	
	return 0;
}

链表的分类
分类:
单链表:每个链表的指针域只能指向后面的节点
双链表:每一个节点有两个指针域
循环链表:能通过任何一个节点找到其他所有的结点
非循环链表:

非循环单链表插入节点伪算法讲解
算法:
遍历
查找
清空
销毁
求长度
排序
删除节点
插入节点
插入算法1)r=p->pNext;p->Next=q;q->pNext=r;
插入算法2)q->Next=p->pNext;p->Next=q;【p,q不是节点,是指针变量】

删除非循环单链表节点伪算法的讲解
删除
算法1(不采用):

p->pNext=p->pNext->pNext;//容易导致内存泄露,没有释放内存
算法2:先临时定义一个指向p后面节点的指针r
r=p->pNext;
p->pNext=p->pNext->pNext;
free(r);

猜你喜欢

转载自blog.csdn.net/KaiFcookie/article/details/102772315