ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

10链表(面试要求能敲出来)

2022-07-01 12:05:00  阅读:124  来源: 互联网

标签:10 struct int 链表 面试 Student 节点 pNext


链表(数据结构的基础:能完全敲出来)

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个节点离散分配,彼此通过指针相连,每个节点只有一个前驱节点和后续节点,首尾节点分别没有前驱和后续节点

    • 专业术语:首节点、尾节点、头结点、头指针、尾指针
    1. 首节点:第一个有效节点

    2. 尾节点;最后一个有效节点

    3. 头结点:

    • 在首节点前面加一个节点,头结点里面没有存放有效数据。头结点的存在意义:头结点存在的意义是在对链表增、删、改、查时方便
    1. 头指针:指向头节点的指针变量
    2. 尾指针:指向尾节点的指针变量
  • 确定一个链表至少需要几个参数(上阶段结构体数组需要三个参数):头指针

  • 分类:

    1. 单链表

    2. 双链表:每一个节点有两个指针域

    3. 循环链表:能通过任何一个节点找到其他所有的节点

    4. 非循环链表

  • 算法:

    1. 遍历
    2. 查找
    3. 清空
    4. 销毁
    5. 求长度
    6. 排序
    7. 删除节点
  • 链表的优缺点:

链表节点数据类型的表示

# 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有