【C++】【五】循环链表
数据结构:具体的高效有序的管理内存的方法。
- 链表:数据结构的一种 节点:每一块内存 每一个节点可以是裸指针 也可以是结构体 ,结合企业链表的思路可以将类型强转,完成高效的访问。
main.cc
// 单向循环链表.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include<stdlib.h>
#include <iostream>#define CIRCLELINKLIST_TRUE 1
#define CIRCLELINKLIST_FALSE 0typedef struct clinknode {struct clinknode* next;
}clinknode;typedef struct circlelinkist {clinknode head;int size;
}circlelinkist;typedef int(*COMPARE)(clinknode*, clinknode*);typedef void(*PRINTNODE)(clinknode*);circlelinkist* Init_circlelinkist() {circlelinkist* clist = (circlelinkist*)malloc(sizeof(circlelinkist));clist->head.next = &(clist->head);clist->size = 0;return clist;
}void Insert_circlelinkist(circlelinkist* clist, int pos, clinknode* data) {if (clist == NULL) {return;}if (data == NULL) {return;}if (pos<0 || pos>clist->size) {pos = clist->size;}//辅助指针变量clinknode* pcur = &(clist->head);for (int i = 0; i < pos; ++i) {pcur = pcur->next;}data->next = pcur->next;pcur->next = data;clist->size++;
}clinknode* Front_circlelinkist(circlelinkist* clist) {return clist->head.next;
}void RemoveByPos_circlelinkist(circlelinkist* clist, int pos) {if (clist == NULL) {return;}if (pos < 0 || pos >= clist->size) {return;}clinknode* pcur = &(clist->head);for (int i = 0; i < pos; ++i) {pcur = pcur->next;}clinknode* pnext = pcur->next;pcur->next = pnext->next;clist->size--;
}void RemoveByValue_circlelinkist(circlelinkist* clist, clinknode* data, COMPARE compare) {if (clist == NULL) {return;}if (data == NULL) {return;}clinknode* pper = &(clist->head);clinknode* pcur = &(clist->head);for (int i = 0; i < clist->size; ++i) {if (compare(pcur, data) == CIRCLELINKLIST_TRUE) {pper->next = pcur->next;break;}pper = pcur;pcur = pcur->next;}clist->size--;
}int Size_circlelinkist(circlelinkist* clist) {if (clist->size == 0) {return CIRCLELINKLIST_TRUE;}return CIRCLELINKLIST_FALSE;
}int IsEmpty_circlelinkist(circlelinkist* clist) {if (clist->size == 0) {return CIRCLELINKLIST_TRUE;}return CIRCLELINKLIST_FALSE;
}int Find_circlelinkist(circlelinkist* clist, clinknode* data, COMPARE compare) {if (clist == NULL) {return CIRCLELINKLIST_FALSE;}if (data == NULL) {return CIRCLELINKLIST_FALSE;}clinknode* pcur = clist->head.next;int flag = -1;for (int i = 0; i < clist->size; ++i) {if (compare(pcur, data) == CIRCLELINKLIST_TRUE) {flag = i;break;}pcur = pcur->next;}return flag;
}void Print_circlelinkist(circlelinkist* clist, PRINTNODE print) {if (clist == NULL) {return;}clinknode* pcur = clist->head.next;//for (int i = 0; i < clist->size * 3; ++i)for (int i = 0; i < clist->size; ++i) {/* if (pcur == &(clist->head)) {pcur = pcur->next;printf("========================\n");}*/print(pcur);pcur = pcur->next;}
}void Free_circlelinkist(circlelinkist* clist) {if (clist == NULL) {return;}
}typedef struct PERSON {clinknode node;char name[64];int age;
}person;void myprint(clinknode* data) {person* p = (person*)data;printf("name:%s, age:%d \n", p->name, p->age);
}int mycompare(clinknode* data1, clinknode* data2) {person* p1 = (person*)data1;person* p2 = (person*)data2;if (strcmp(p1->name,p2->name) == 0 && p1->age == p2->age) {return CIRCLELINKLIST_TRUE;}return CIRCLELINKLIST_FALSE;
}int main()
{circlelinkist* list = Init_circlelinkist();person p1, p2, p3, p4, p5;strcpy_s(p1.name, "aaa");strcpy_s(p2.name, "bbb");strcpy_s(p3.name, "ccc");strcpy_s(p4.name, "ddd");strcpy_s(p5.name, "eee");p1.age = 10;p2.age = 20;p3.age = 30;p4.age = 40;p5.age = 50;Insert_circlelinkist(list, 100, (clinknode*)&p1);Insert_circlelinkist(list, 100, (clinknode*)&p2);Insert_circlelinkist(list, 100, (clinknode*)&p3);Insert_circlelinkist(list, 100, (clinknode*)&p4);Insert_circlelinkist(list, 100, (clinknode*)&p5);Print_circlelinkist(list, myprint);printf("---------------------------\n");person pdel;strcpy_s(pdel.name, "ccc");pdel.age = 30;RemoveByValue_circlelinkist(list,(clinknode*)&pdel,mycompare);Print_circlelinkist(list, myprint);printf("---------------------------\n");Free_circlelinkist(list);system("pause");return 0;
}
【C++】【五】循环链表相关推荐
- 数据结构与算法常见笔试题 .
第一章 数据结构与算法 一.算法的基本概念 计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法. 1.算法的基本特征:可行性,确定性,有穷性,拥有足够的情报. 2.算法的基本要素:算法中对 ...
- [转载]数据结构笔试题基础
第一章 数据结构与算法 一.算法的基本概念计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法. 1.算法的基本特征:可行性,确定性,有穷性,拥有足够的情报. 2.算法的基本要素:算法中对数 ...
- c++使用单向链表存储一组有序数据_数据结构笔试题基础
第一章 数据结构与算法 一.算法的基本概念 计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法. 1.算法的基本特征:可行性,确定性,有穷性,拥有足够的情报. 2.算法的基本要素:算法中对 ...
- 数据结构与算法常见笔试题
第一章 数据结构与算法 一.算法的基本概念 计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法. 1.算法的基本特征:可行性,确定性,有穷性,拥有足够的情报. 2.算法的基本要素:算法中对 ...
- 单、双链表的循环链表(十五)
1. 单链表的循环链表 <1>.单链表的循环链表特点 单链表只能向后操作,不能向前操作,如果从当前结点开始,无法访问该结点前面的结点. 如果最后一个结点的指针指向头节点,形成一个闭环,就可 ...
- 数据结构笔记(五)-- 循环链表的实现
单循环链表的实现 单循环链表就是让单链表的尾结点指向头结点 1.构造一个空的线性表L void InitList(LinkList &L)//传递实参而非形参 {// 操作结果:构造一个空的线 ...
- 脚踏实地《数据结构第二章》第五节:循环链表
一:定义 二:循环单链表 2.1 初始化代码 typedef struct LNode{//定义单链表结点类型ElemType data;//每个节点存放一个数据元素struct LNode *nex ...
- 五、单向环形链表---实现约瑟夫(Josephu)问题
使用单向环形链表实现约瑟夫(Josephu)问题 1.约瑟夫(Josephu)问题描述 Josephu 问题为:设编号为 1,2,- n 的 n 个人围坐一圈,约定编号为 k(1<=k<= ...
- 五、【线性表】线性表的链式表示和实现
线性表的链式表示和实现 上节提到,由于顺序表的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素.然而,这也导致了顺序表在执行插入或删除操作时,需要移动大量元素.本节来讨论 ...
最新文章
- 2d的公式_钢筋下料计算公式分享,助你提高施工效率!
- mini-caffe
- 嘿,开发者,你的坑,我来填!
- windows/Linux 安装 MongoDB 3.6.5
- 4G DTU使用教程
- Linux下开启mysql数据库的远程访问权限
- java开发中jdbc连接数据 库的操作代码
- Rest接口中正则表达式
- php无需鉴权的接口,thinkphp5-restfulapi 博客 接口鉴权应用
- 小孩天天不愿意去幼儿园怎么办?
- ppt倒计时3分钟_老板发来200页PPT文件,让我翻译成英文,3分钟教你搞定
- Android小项目--2048小游戏
- Abaqus有限元分析软件介绍
- 【论文笔记】Reaching agreement in the presence of faults (EIG)
- Web漏洞-Xss跨站
- 雨水情自动监测 遥测终端机
- 计算机课吐槽,让上课更有趣!这位老师的课学生可发弹幕提问吐槽
- Altium Designer 20中创建网络类、隐藏网络连线
- 003--北大考研计算机--考研经验贴
- 左手Python2 右手Python3,我该选择谁?
热门文章
- net core mysql 连接池_EF Core 小坑:DbContextPool 会引起数据库连接池连接耗尽
- java iris_利用K-Means聚类算法实现对iris.data.ulab
- l开头的英文车标是什么车_汽车品牌车标大全,有哪些品牌的车标你没见过?...
- 按器件划分微型计算机是()计算机,计算机与信息技术概述(答案)
- java thread isalive,《Java多线程编程核心技术(第2版)》 —1.4 isAlive()方法
- matlab中的mkdir函数_科学网—Matlab中计算函数运行时间的三种方法及判断新建文件夹 - 张伟的博文...
- LabVIEW设计自定义滚动条
- 【camera-radar】基于ROS的多传感器融合感知系统实现(雷达+相机)(1)
- 物体识别算法——SIFT/SURF、haar特征、广义hough变换的对比分析
- onethink php7.1,海豚PHP开发框架下载