其他分享
首页 > 其他分享> > 10链表(面试要求能敲出来)

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;
}

链表的定义

链表节点数据类型的表示

# 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;

插入节点的伪代码

题目:把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