10链表(面试要求能敲出来)
作者:互联网
链表(数据结构的基础:能完全敲出来)
typedef:
- 作用:重命名但功能相同,同样可以对结构体可以简化表示。
# include<stdio.h>
typedef int zhangsan;//zhangsan等价于int
typedef struct Student
{
int sid;
char name[100];
char sex;
}ST;//重命名为ST
int main(void)
{
//struct Student st;
//struct Student * ps = &st;
struct Student st;//等价表示:ST st
struct Student * ps = &st;//等价于ST * ps = &st;
return 0;
}
例子2:结构体替换为指针类型
# include<stdio.h>
typedef int zhangsan;//zhangsan等价于int
typedef struct Student
{
int sid;
char name[100];
char sex;
}* PST;//PST等价于struct Student *
int main(void)
{
struct Student st;
PST ps = &st;
ps->sid = 99;
printf("%d\n",ps->sid);
return 0;
}
例子3:既有指针又有常规替换
# include<stdio.h>
typedef int zhangsan;//zhangsan等价于int
typedef struct Student
{
int sid;
char name[100];
char sex;
}* PST,STU;//PST等价于struct Student *,STU等价于struct Student
int main(void)
{
struct Student st;
PST ps = &st;
ps->sid = 99;
printf("%d\n",ps->sid);
STU * pt = &st;
pt->sid = 100;
printf("%d\n",pt->sid);
return 0;
}
链表的定义
-
定义:n个节点离散分配,彼此通过指针相连,每个节点只有一个前驱节点和后续节点,首尾节点分别没有前驱和后续节点
- 专业术语:首节点、尾节点、头结点、头指针、尾指针
-
首节点:第一个有效节点
-
尾节点;最后一个有效节点
-
头结点:
- 在首节点前面加一个节点,头结点里面没有存放有效数据。头结点的存在意义:头结点存在的意义是在对链表增、删、改、查时方便
- 头指针:指向头节点的指针变量
- 尾指针:指向尾节点的指针变量
-
确定一个链表至少需要几个参数(上阶段结构体数组需要三个参数):头指针
-
分类:
-
单链表
-
双链表:每一个节点有两个指针域
-
循环链表:能通过任何一个节点找到其他所有的节点
-
非循环链表
-
-
算法:
- 遍历
- 查找
- 清空
- 销毁
- 求长度
- 排序
- 删除节点
-
链表的优缺点:
链表节点数据类型的表示
# include <stdio.h>
typedef struct Node
{
int data; //数据域
struct Node * pNext;//指针域
}NODE,*PNOTE; //NODE等价于struct Node,*PNOTE等价于struct Node*
int main(void)
{
return 0;
}
free p;
- 删除p指向节点所占的内存,不是删除p本身所占的内存。
- p->pNext; p指向结构体变量的pNext成员(这里为节点地址)本身
插入节点的伪代码
题目:把q所指向的节点插到p所指向节点的后面
方法1:定义临时变量
r = p->pNext; //p所指向的节点中地址赋予临时变量r
p->pNext = q; //q所指向节点地址赋予p所指向节点的地址成员
q->pNext = r; //p所指向的节点中地址成员赋予q所指向节点的地址成员
方法2:除去中间变量直接赋值
q->pNext = p->pNext;
p->pNext = q;
删除节点的伪代码
假如有三个节点,头指针为p,删除链表中间节点。
- 中间变量在删除链表时可以取出被删除节点地址之后释放内存。
r = p->pNext;//取出中间节点地址
p->pNext = p->pNext->pNext;//p->pNext为中间节点地址
free(r);//释放掉中间节点,防止占用内存
错误例子:出现中间变量内存
p->pNext = p->pNext->pNext;//p->pNext为中间节点地址
标签:10,struct,int,链表,面试,Student,节点,pNext 来源: https://www.cnblogs.com/chentongxue/p/16434063.html