循环单链表的类实现

循环单链表的简单实现(C语言) 阅读详情

/*  利用C++语言,实现循环单链表各种算法:建立链表、链表插入、链表删除、链表查找等。本可以把主菜单也做出来,但由于时间关系,主菜单暂时没加,此版本 只为演示链表的操作C++形式,即把C中的面向过程改为面向对象,表现为链表类。此外还有些输入类型检验等待完善*/
/*   main.cpp   */  
   
  #include   <iostream.h>  
  #include   <stdlib.h>  
  #include   "CircList.h" 
  #include <string.h>
  //using   namespace   std;  
   
  void   main(int   argc,   char   *argv[])  
  {      
      
      CircList   cc;      
      cc.GetData();
   cc.Show();
      //system("PAUSE");
   cout<<"The List`s length is:"<<cc.Length()<<endl;
   cc.Find();
   cc.Show();
   cc.Insert();
   cc.Show();
   cc.Remove();
   cc.Show();
   exit(0);
  }  
/*   CircList.h   */  
   
  #ifndef   _CircList_h  
  #define   _CircList_h  
   
  class   CircListNode{  
      friend   class   CircList;  
      public:  
          CircListNode(int   d=0):data(d),link(NULL){}  
      private:  
          int   data;  
          CircListNode   *link;  
  };  
   
  class   CircList{   //带头结点的
      public:  
          CircList();                          
          ~CircList();  
          int   Length()   const;   //Length   of   the   Circle   List  
          bool   IsEmpty(){return   first->link==first;}  
          bool   Find();         //find   the   value   in   the   CircleList  
          void   GetData();           
          void   Prior();                 //指针前移    
          void   Insert();         //insert   a   node    in the position
          int   Remove();         //delete   a   node  and return the data
          void Show();
      private:  
          CircListNode   *first,*current,*last;  
  };  
   
  #endif  
/*   CircList.cpp*/  
   
  #include   <iostream>  
  #include   <stdlib.h>    
  #include   "CircList.h"  
  #include <string.h>
   
  using   namespace   std;  
   
  CircList::CircList(){  
          first=current=new   CircListNode();  
          last=first;  
  }  
   
  CircList::~CircList(){  
          CircListNode   *pcNode=first;  
   
          while((first->link)!=last){         //从头节点开始,逐个删除  
                  pcNode=first;  
                  first=first->link;  
                  last=first;  
                  delete   pcNode;  
          }  
          delete   first;  
  }  
   
  int   CircList::Length()const{  
          int   len=0;  
          CircListNode   *pcNode=first;  
          while((pcNode->link)!=first){  
                  len++;      
                  pcNode=pcNode->link;  
          }  
          return   len;    
  }  
  void   CircList::GetData(){
    cout<<"please input the integer figure that you want input to list:"<<endl;
    cout<<"The q is to end!"<<endl;//实际上,只要是非INT的输入都会结束循环
    int temp;
   
    cin>>temp;
    if(cin.good())
    {  
     current=new CircListNode();
     current->data=temp;
     first->link=current;
     last=current;
     last->link=first;
     for(int i=1;i;i)
     {
         cin>>temp;
      if(cin.good())
      {
      current=new CircListNode();
      current->data=temp;
      last->link=current;
      last=last->link;
      last->link=first;
      }
      else
      {
      cin.clear();//清除缓存区
      cin.ignore(10000,'/n');
      i=0;
      };
     };
    }
    else
    {first->link=last;
               cin.clear();
      cin.ignore(10000,'/n');
    };
  
  }
  void CircList::Show(){
    cout<<"The List number is:/t";
       CircListNode *p=first->link;
    do{
    cout<<p->data<<"/t";
    p=p->link;
    }while(p!=first);
  }
  bool CircList::Find(){//find   the   value   in   the   CircleList
   int value;
   cout<<"Please input the figure that you want to find!"<<endl;
   //cin.rdstate();
 
   cin>>value;
   CircListNode *p=first; 
   while(p->data!=value && p->link!=first){
   p=p->link;
   };
   if(p->data==value){
    cout<<"There has the number."<<endl;
    return true;}
   else if(p->link=first){
    cout<<"There hasn`t the number."<<endl;
       return false;};
  }
  void CircList::Insert(){
   int position,figure; 
   cout<<"/nPlease input the position that you want to insert."<<endl;
   cin>>position;
   cout<<"/nPlease input the figure that you want to insert."<<endl;
   cin>>figure;
   cout<<endl;
   CircListNode *p=first;
   if(position>Length()||position<1)
    cout<<"The position is over!";
   else{
    for(int i=2;i<=position;i++){//在第position个位置插入即为figure插入后为list的第position+1个元素,
    p=p->link;                //如position=1那么p=first,figure会成为新List的第二node;
    };
    CircListNode *insert=new CircListNode();//因为是单链表,所以插入位置选在了P的后面;
    insert->data=figure;
    insert->link=p->link;
    p->link=insert;
   };
  }
  void   CircList::Prior(){
   int a=Length();
   for(int i=1;i<=a;i++){
   current=current->link;
   };
  }
  int CircList::Remove(){
    int position; 
    cout<<"/nPlease input the position that you want to remove."<<endl;
    cin>>position;
    cout<<endl;
    if(position>Length()||position<1)
    cout<<"The position is over!";
       else{
     current=first->link;
     for(int i=2;i<=position;i++){
     current=current->link;               
     };
     CircListNode *p=current;
     int a=p->data;
     Prior();
     current->link=current->link->link;
     delete p;
     cout<<"The data that you removed is : "<<a<<endl;
     return a;
     
    }
  }
 
实现循环单链表的各种基本运算的算法 数据结构与算法 李春葆 第五版实验报告2.22 含代码和结果 立即下载

相关推荐

用C++实现单向循环链表的解决方法

本篇文章是对用C++实现单向循环链表的解决方法进行了详细的分析介绍,需要的朋友参考下

【数据结构与算法】- 循环链表 - 详细实现步骤及代码(C/C++)

本文介绍循环链表的基础概念,以及一步步说明怎样实现一个循环链表,最后给出C语言实现代码

wkd_007的博客 1万+

JavaScript性能优化:全链路性能优化策略

JavaScript性能优化是提升Web应用质量的核心要素,直接影响用户体验与业务成果。研究表明,页面加载延迟1秒可能导致转化率下降7%。高效的JavaScript执行能减少主线程阻塞,避免动画卡顿或操作延迟,尤其在移动端低性能设备上更为关键。优化内存管理与减少冗余计算可降低浏览器资源消耗,防止因内存泄漏导致的崩溃,提升应用稳定性。在竞争激烈的互联网环境中,性能优势已成为产品差异化的关键因素,直接影响用户留存与商业价值。因此,性能优化应作为开发全周期的核心实践,而非事后补救措施。

weixin_49707375的博客 1274

数据结构笔记(五)-- 循环链表的实现

单循环链表的实现 1、构造一个空的线性表L void InitList(LinkList &L)//传递实参而非形参 {// 操作结果:构造一个空的线性表L L = (LinkList)malloc(sizeof(LNode));// 产生头结点,并使L指向此头结点 if (L == NULL) { printf("内存分配是失败,退出程序\n"); exit(-1); } L->next = L; // 指针域指向头结点 } 2、判断单循环链表是否为空 如果单循环链表为

m0_43609475的博客 1328

Lenovo 拯救者15ISK硬件升级实战:从内存到固态硬盘的全面优化

本文详细介绍了为联想拯救者15ISK笔记本电脑进行硬件升级的完整实战指南。通过评估升级可行性,指导如何挑选兼容的内存条与NVMe固态硬盘,并提供详细的拆机安装步骤与系统安装避坑技巧。升级后,笔记本的开机速度、软件加载及多任务处理能力获得飞跃式提升,让老旧设备重获新生。

weixin_29310631的博客 557

ctfshow 萌新22 (类似级客巅峰web4)

在之前ctfshow平台的萌新22,大家都认为是无解的,题目也介绍了"还能搞,阿呆表示将直播倒立放水"。但是在级客巅峰结束的那天晚上,群里的师傅介绍说,如果修改了php.ini里面的配置(register_argc_argv)可以做出来。最后是真的做出来了。 使用阿呆~~~? 下面是自己的思考,感谢Guoke师傅和ha1c9on师傅的帮助 一. 源代码 <?php if(isset($_GET['c'])){ $c=$_GET['c']; if(!preg_mat.

Firebasky的博客 4217

单向循环链表实现

1.1 基本介绍 循环链表,顾名思义,链表整体要形成一个圆环状。在单向链表中,最后一个节点的指针为null,不指向任何结点,因为没有下一个元素了。要实现循环链表,只需要让单向链表的最后一个节点的指针指向头结点即可。 1.2 添加操作 1、思路分析 链表为空的时候 让head和tail同时指向这个结点,让尾结点的下一跳指向头结点。 头部添加 先让要添加的元素指向head,然后再将head指针指向新结点。 最后让tail指针下一跳重新指向头结点 尾部添加 直接让新结点的下一跳指

hxy1625309592的博客 1683

(25.08)Ubuntu20.04+ROS1复现FAST-LIO2

请确保在。

m0_69023437的博客 3996

约瑟夫环问题(循环链表表示)

 #include "CircList.h" templateclass T>void Josephus(CircListT> &Js,int n,int m)     //n---总数,m---目标数{     CircLinkNodeT> *p = Js.GetHead()->link,*pre = NULL;     for (int i = 0;i n-1;++

cuijianhui的专栏 451

使用Avalonia跨Linux平台

Avalonia类似使用WPF的技术方法来开发,所以,需要会使用WPF,其中的一些语法和写法与WPF有所区别,但是他们相差不大,会WPF的话,基本上可以看看文档后,完全掌握Avalonia的使用,从而达到跨平台开发的任务。其实写法有些不一样,可以参考官网的说明,进行修改。2. 安装完成后,重启VS2022,我们可以看到1和2,其中1是使用MVVM模式开发,2是普通模式开发,我们选择2,建立项目。9.直接双击粉红色的文件,进行安装,输入密码,但是美中不足的是,好像没有图标,图标似乎需要单独去设置。

故里2130 1万+

YOLOv8改进 | Neck篇 | Slim-Neck替换特征融合层实现超级涨点 (又轻量又超级涨点)

本文给大家带来的改进机制是Slim-neck提出的Neck部分,Slim-neck是一种设计用于优化卷积神经网络中neck部分的结构。在我们YOLOv8中,neck是连接主干网络(backbone)和头部网络(head)的部分,负责特征融合和处理,以便提高检测的准确性和效率。亲测在小目标检测和大尺度目标检测的数据集上都有大幅度的涨点效果(mAP直接涨了大概有0.4左右。同时本文对Slim-Neck的框架原理进行了详细的分析,不光让大家会添加到自己的模型在写论文的时候也能够有一定的参照。

Snu77的博客 1万+

线性表的循环单链表的类定义的代码实现(python语言)

# 单链表 class ListNode: # 定义链表节点类 def __init__(self, elem_1, next_1): self.elem = elem_1 # 节点的值 self.next = next_1 # 指向下一个节点的链接 class LoopList: # 定义一个循环单链表 def __init__(sel...

zhangyu4863的博客 330

Linux ARM平台开发系列讲解(LED) 2.1.1 如何点亮一个LED之添加设备树信息

1. 设备树添加设备信息 我拿到的开发板上有两颗LED供用户编程使用,分别是GPIO5_IO8和GPIO5_IO9,设备信息如下,不同板子的设备定义不同,根据自己的实际情况进行添加。 2. 编译设备树 根据自己拿到的SDK,执行编译命令,我这里拿到的SDK编译脚本为: ./build.sh kernel 3. 使用uuu工具烧录新编译好的内核 因为imx8 SDK设备树和内核是统一编译成一个镜像,所以只需要烧录内核,设备树文件也会烧录。 sudo uuu -b emmc imx-kernel.bin

DSMGUOGUO的博客 920

java循环单链表类构造函数_Java单链表的实现

最近在刷Leetcode时,遇到链表的题,想去测试运行结果,却发现Java中并没有单链表的实现;于是在网上搜索了如下两篇文章(参考文献),参考实现了一个简易的Java单链表:/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(...

weixin_31509753的博客 461

大模型新闻摘要生成质量评估工具

大模型新闻摘要生成质量评估工具 关键词:大模型、新闻摘要、质量评估、自然语言处理、算法 摘要:本文将探讨大模型新闻摘要生成质量评估工具的设计与应用。首先介绍大模型新闻摘要生成的背景和问题,然后深入分析质量评估的难点和重要性,接着介绍大模型的

AI天才研究院 828

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

数据结构与算法之PHP实现链表类(单链表/双链表/循环链表)

数据结构与算法之PHP实现链表类(单链表/双链表/循环链表)

juvenile_的博客 243

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

python:单链表、尾结点单链表、循环链表、双链表类的实现

不同链表的简单总结】 1.基本单链表--首端插入和删除时间复杂度为O(1),定位操作和尾操作时间复杂度为O(n) 2.增加尾结点引用域的链接--首端、尾端插入和首端弹出元素时间复杂度为O(1),尾端删除时间复杂度为O(n) 3.循环单链表--首端和尾端插入和首端元素弹出时间复杂度为O(1) 4.双链表--两端插入和删除的时间复杂度为O(1) 链表的一些优点】 1.表结构是由一些链接起来...

weixin_39781462的博客 1952

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

数据结构学习之循环单链表

循环单链表即将普通的单链表结成一个环,与单链表相比,循环单链表主要有以下两点差异: 1、链表初始化时需要将头指针指向自己,形成一个环。 2、遍历时不再判断下一节点不为空,而是判断下一节点不是头结点。 节点类的实现与单链表相同 //节点类 public class Node<T> { //数据域 public T data; //指针域 public Node<...

xuewenyong的博客 825

Python 数据结构 链表实现

单链表类 与 循环单链表类 的实现 以及Josephus问题 #!/usr/bin/env python # -*- coding: utf-8 -*- class LNode: def __init__(self, elem, next_ = None): self.elem = elem self.next = next_ class Lin...

sinat_30281495的博客 334

java循环单链表类构造函数_C++实现双向循环链表

本文实例为大家分享了C++实现双向循环链表的具体代码,供大家参考,具体内容如下一、概念1.在双链表中的每个结点应有两个链接指针:lLink -> 指向前驱结点 (前驱指针或者左链指针)rLink->指向后继结点(后驱指针或者右链指针)2.双链表常采用带附加头结点的循环链表方式:first:头指针,不存放数据,或者存放特殊要求的数据。它的lLink指向双链表的尾结点(最后一个结点),它...

weixin_28834765的博客 214

【C++】单链表、循环单链表

单链表、循环单链表1、单链表单链表的单个结点单链表类单链表的各个成员函数单链表的使用2、循环单链表 1、单链表 单链表的单个结点 struct Node{ int data; //数据域 Node* next; //指针域 }; 单链表类 class LinkList{ public: LinkList(); //无参构造函数,建立只有头结点的空链表 LinkList(int a[], int n)

霍瑟夫的博客 1417

数据结构学习----线性表的链式表示之循环单链表(Java实现)

线性表接口LList: package com.clarck.datastructure.linked; /** * 线性表接口LList,描述线性表抽象数据类型,泛型参数T表示数据元素的数据类型 * * @author clarck * */ public interface LList { /** * 判断线性表是否空 * @return

雪夜&流星的专栏 896

python循环单链表

循环单链表的特点是可以通过任意一个节点遍历整个链表,因为最后一个节点的指针指向头节点,形成了一个循环。与普通的单链表不同的是,循环单链表的最后一个节点的指针指向头节点,形成一个循环。循环单链表可以用于解决某些特定的问题,例如约瑟夫环问题,即在一个循环单链表中,从指定位置开始,每隔一定的步长删除一个节点,直到只剩下一个节点为止。- 循环单链表:可以通过任意一个节点出发,通过遍历每个节点的指针,最终又回到起始节点,实现对整个链表的遍历。- 循环单链表:最后一个节点的指针指向头节点,形成一个循环。

HYSliuliuliu的博客 1万+

java循环单链表类构造函数_数据结构Java实现04----循环链表、仿真链表

单向循环链表双向循环链表仿真链表一、单向循环链表:1、概念:单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环。和单链表相比,循环单链表的长处是从链尾到链头比较方便。当要处理的数据元素序列具有环型结构特点时,适合于采用循环单链表。和单链表相同,循环单链表也有带头结点结构和不带头结点结构两种,带头结点的循环单链表...

weixin_39643189的博客 289

设单链表查找算法c++实现_数据结构与算法之PHP实现链表类(单链表/双链表/循环链表)...

链表是由一组节点组成的集合。每个节点都使用一个对象的引用指向它的后继。指向另一个节点的引用叫做链。链表分为单链表、双链表、循环链表。一、单链表插入:链表中插入一个节点的效率很高。向链表中插入一个节点,需要修改它前面的节点(前驱),使其指向新加入的节点,而新加入的节点则指向原来前驱指向的节点(见下图)。由上图可知,B、C之间插入D,三者之间的关系为current为插入节点的前驱节点 current-...

weixin_35823048的博客 148
上一篇: J2EE安装
下一篇: Turbo Pascal简介
geting
博客等级 码龄20年 13粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值