欢迎使用本站,预祝练习时长两年半的选手们到成功! [本模块信息来自tem/def/head]

class13 动态链表 初识树结构 zhc

时间:2024-06-30 10:00 作者:admin 点击:
数组和链表的共同点,都是按照输入顺序存放的,顺序结构 动态创建链表 静态-动态 静态创建:编译的过程就把空间提前预置好了 动态创建:在运行时,临时创建空间 struct node{ int v

数组和链表的共同点,都是按照输入顺序存放的,顺序结构


动态创建链表


静态-动态

静态创建:编译的过程就把空间提前预置好了

动态创建:在运行时,临时创建空间


struct node{

   int val;

   node *nt;

};

静态创建

node a;

a.val=5;

动态创建

node *a;

a=new node;

a->val=5;

-------------

静态创建长度为100的链表,创建100个变量

动态创建链表(任意长度),只需要三个指针

node *head,*p,*q;

p=new node;

p->val=1;

head=p;

for(int i=2;i<10;i++){

   q=new node;

   q->val=i;

   p->nt=q;

   p=q;

}

p->nt=NULL;//nullptr  空指针处理,避免野指针操作数据


输入n,输入n个数字,并用链表存储


查找:输入一个数字m,输出m在链表中是第几个

int ans=-1;

p=head;

for(int i=0;p!=NULL;i++){

   if(p->val==m){

       ans=i;

       break;        

   }

   p=p->nt;

}

cout<<ans;


插入:输入一个数字j,输入一个数字k,在链表的第j个节点后面插入k

p=head;

int i=0;

while(i!=j&&p!=NULL) p=p->nt;

if(p==NULL) return ;

q=new node;

q->val=k;

q->nt=p->nt;//先将新节点连接j+1节点

p->nt=q;//再将j点连接新节点


删除:输入一个数字m,删除值为m的节点

p=head;

if(p->val==m) head=head->nt;

else{

   while(p->nt!=NULL&&p->nt->val!=m) p=p->nt;

   q=p->nt;

   p->nt=q->nt;

}

delete q;//删除q指向的内存空间,此时q变成野指针

q=NULL;//处理成空指针


#include <list> 默认是双向链表


struct node{

   int val;

   node *nt,*pr;

};


容器库:

顺序容器:输入的数据,按顺序存放

array : 数组的类模板

vector : 可变长数组 向量

deque : 双向队列

forward_list : 单向链表

list : 双向链表

关联容器:输入的数据,不按照输入顺序存放,有特定的排序规则(默认从小到大)

set 集合:自动有序,自动去重

map 映射:key-valve成对存放,自动有序(按key排序),自动去重(覆盖或跳过重复key的valve值)

容器适配器:有固定的存取顺序

stack 栈:先进后出,后进先出

queue 队列:先进先出,后进后出

priority_queue 优先队列:默认大顶堆,大的先出,小的后出



动态创建

一对多:树

当前代码指不规则树

struct node{

   char val;

   vector<node*> chi;

};

node *root;

map<char,node*> nm;//该字符对应的节点地址

int main(){

   char a,b;

   node *p,*q;

   int n=5;

   while(n--){

       cin>>a>>b;

       if(nm[a]>0) p=nm[a];

       else{

           p=new node;

           p->val=a;

           nm[a]=p;

       }

       

       if(nm[b]>0) q=nm[b];

       else {

           q=new node;

           q->val=b;

           nm[b]=q;

       }

       p->chi.push_back(q);

   }

}


树的根、根节点、祖先节点

子节点<->父节点 相对存在

叶子节点:没有子节点的节点

子孙节点:根节点下面的所有节点

兄弟节点:同一层/同一父节点(亲兄弟表兄弟)

层:距离根节点的层数(节点数)

树的深度:max层

度:一个节点的子节点的数量

树的度:max度

边:树中的连线的长度

树的高度:根节点到叶子节点的最远距离

(责任编辑:admin)
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%