首页 > 其他分享 >数据结构——从入门到入土

数据结构——从入门到入土

时间:2024-04-03 22:00:17浏览次数:9  
标签:入门 int list next Linklist 入土 数据结构 节点 指针

链表的建立及遍历:
分为如下几步:
声明链表这种结构,比如:

点击查看代码
typedef struct node* listlink;     //定义一个指针类型名称,使指针变量能像其他变量那样声明,而不需要在每个指针变量前加*
typedef struct nude(){
     int data;
     struct listlink next;}LNode;  //声明该结构的一个变量,叫LNode

在int main 外创建一个链表并且初始化it,比如:

点击查看代码
   listlink list;       //先定义一个指针,名字叫list,或者说,声明一个指向节点的指针,叫list
   list = new LNode();  //给指针分配一块内存块的地址
   list->data = 0;      //代表被指针指向的节点的数据为0,这个节点的地址域为空,这个链表现在只有一个头节点
   list->next = NULL;
   return list;        //因为这个是在int main 外的一个函数,因此要有返回值,并且返回值是那个头指针
}

设定一个函数,然后通过这个函数扩充链表,比如:

点击查看代码
void Insertlist(int n, Linklist list){
    Linklist p;       //首先建立了一个指针p
    int a[n];         //然后创建了一个数组,这个数组是用来保存东西的,具体作用就是先把要装进链表的数储存在数组里
    int i = 0;
    cin>>n;
    for(i;i<n;i++){
      cin>>a[i];}
   
    Linklist p = list;//对的,上一步还没完,仅仅是把数装进数组并没有体现出链表的优势,于是上一步建立的p登场了,他先指向了头节点,然后随着一个for循环,一个一个的建立出小小的动态内存空间,也就是节点们,p也随之缓缓移动,一个一个的指向新建立的节点们,然后把数组里的值赋给当下所指的节点,并将他们节点的地址域通通连接上,此时,p是一位优秀的传信使者
    for(int i =0;i<n;i++){
       p->next = new LNode();
       p->data = a[i];}
       if(i = n-1){         //最后,不要忘记了一个重要的判断,如果p指向的下一个节点的地址域为空,也就是说,数组里的数已经全部被移进了链表里,于是,p所指的下一个节点应该为空
            p->next = NULL;}
       else{
            p = p->next;}  //要不然的话,就继续指向下一个
   }

下面是链表遍历:

点击查看代码
void ListTraver(Linklist list){  //这是定义这个函数的过程
      Linklist p;                //新定义了一个追踪指针,先让这个指针指向头节点
      p = list;
     
        if(p->next != NULL){    //然后让这个指针p从头节点list开始,一个一个敲门问里面存的啥,顺着地址门牌,并把他们输出
           cout<<p->data<<' ';}
        else{                  //直到问到尽头
           p = p->next;
         } 
          cout<<p->data;       //但是有一个问题出现了,就是当p移动到最后一个节点时,也就是当最后一个节点指向NULL,他就不输出最后一个节点的值了
                              //所以需要最后一个输出将最后一个节点的值输出来
                            } 

全代码:

点击查看代码
#include<bits/stdc++.h>
#include<stdio.h>
using namespace std;

typedef int ElemType;

typedef struct node{
   int data;
   struct node *next;
} LNode;

typedef struct node *Linklist;


Linklist ListInit(){
   Linklist list;
   list = new LNode();

   list->data = 0;
   list->next = NULL;
   return list;
}

void InsertList(int n,Linklist list){
   ElemType a[n];
   int i;
   for(i = 0;i<n;i++){
    cin>>a[i];
   }


   Linklist p = list;
   for(i=0;i<n;i++){
    p->data = a[i];
    p->next = new LNode();

     if(i==n-1){
        p->next = NULL;
     }
     else {
        p = p->next;
     }
   }
}

void ListTraver(Linklist list){
   Linklist p = list;
   while (p->next != NULL){
       cout<<(p->data)<<' ';
       p = p->next;
   }
   cout<<(p->data);
}
int main(){
   int n;
   cin>>n;
   if(n<=0){
    return 0;
   }

   Linklist list;
   list = ListInit();
   InsertList(n,list);
   ListTraver(list);
   return 0;

}

标签:入门,int,list,next,Linklist,入土,数据结构,节点,指针
From: https://www.cnblogs.com/sly-345/p/18113540

相关文章

  • MySQL 入门教程
    创作目的以前在学习mysql的时候,经常东拼西凑的学习零碎的知识。完全无法形成完整的知识体系。这个属于mysql核心知识点的梳理,新人可以作为学习的参考,有经验的话也可以作为可查的资料宝典。mysqlinstallmysql安装教程参见以前的文章:MySQL5.6Install,WindowsM......
  • 数据结构与算法分析实验3 [进阶]通过链表实现多项式加法和乘法
    文章目录大致内容介绍多项式加法代码一览头文件Poly.h内容如下:实现文件Poly.cpp内容如下:初始化增加元素删除元素功能函数遍历函数清除销毁打印多项式向多项式内插入一个元素源文件main.cpp内容如下:实现效果:多项式乘法实现方法:在Poly.h中添加声明:在Poly.cpp中添加实现:在......
  • (C++)auto关键字(C++11)——<入门>
    类型别名思考:随着程序越来越复杂,程序中用到的类型也越来越复杂,经常体现在:1.类型难于拼写2.含义不明确导致容易出错#include<string>#include<map>intmain(){std::map<std::string,std::string>m{{"apple","苹果"},{"orange","橙子"......
  • (C++)内联函数——<入门>
    概念:以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。如果在上述函数前增加inline关键字将其改成内联函数,在编译期间编译器会用函数体替换函数的调用。 查看方式:1.在release模式......
  • 拼多多虚拟项目:入门到精通,开一个月入万把块的店铺 真不难(24年更新)
    拼多多虚拟项目:三两句话解决选品难,一个方法判断产品容不容易被投诉,产品会不会被起诉(简单、粗暴、好用)做虚拟电商项目,卖什么最安全?有人可能会说卖素材。因为素材都是没有版权的,不会被投诉更不会被起诉。但,我可以很负责任的告诉你,素材照样有版权。即使是一张图片,一个PSD源文......
  • 【零基础入门芯片课】半导体是什么?
    大家好,我是砖一。今天给大家分享一下半导体的基础知识,普及一下何为半导体,有从事IC,功率元器件,开关电源的朋友可以了解一下,希望对你有用~近几年,我们或多或少听过半导体,芯片等等一些高端名词,但是却对这些名词很难用大白话说清楚道明白,下面用简单的语言形容一下什么是半导体。1......
  • 数据结构——队列(包括循环队列)——Java版
    目录队列介绍:基本概念:应用:Java实现示例:循环队列的Java实现:队列介绍:队列(Queue)是一种常见的数据结构,它按照先进先出(FIFO,First-In-First-Out)的原则管理数据。在现实生活中,队列的概念很容易理解,就像是排队等待服务的人群一样。在计算机科学领域,队列同样扮演着重要的角色,在......
  • MySQL索引背后的数据结构及算法原理
    摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MyS......
  • python常见数据结构及方法
    Python提供了多种内置的数据结构,这些数据结构非常灵活且功能强大,能够满足各种程序设计需求。下面是一些最常用的Python数据结构及其内置方法的详细说明:1.列表(List)列表是Python中最基本的数据结构之一。列表可以包含不同类型的元素,包括另一个列表。常用内置方法:append(x......
  • 【数据结构与算法篇】动态顺序表实战项目:通讯录
    【数据结构与算法】动态顺序表实战项目:通讯录......