循环链表

用循环链表解决Josehus问题

大城市里の小女人 提交于 2019-11-27 00:11:53
#include <iostream> using namespace std; struct CirLinkNode { int data; struct CirLinkNode *link; CirLinkNode(CirLinkNode *next = NULL):link(next) { } CirLinkNode(int d, CirLinkNode *next = NULL):data(d), link(next) { } }; class CircList { public: CircList() { head = NULL; } void create(); CirLinkNode* getHead() { return head; } private: CirLinkNode* head; }; void CircList::create() { CirLinkNode *rear = NULL, *temp; int n; cin>>n; while(n != 0) { temp = new CirLinkNode(n); if (head == NULL) { head = temp; rear = temp; }else { rear->link = temp; rear = temp; } cin>>n; } rear->link = head; }

循环链表和双向链表

好久不见. 提交于 2019-11-26 17:08:32
循环链表及其操作: 就是将尾指针指向头部: 如:#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct data { int num; struct data *next; }DaTa,*Data; //创建循环链表 Data create(int n) { Data p, r=NULL, q=NULL ; int i; for ( i = 0; i < n; i++) { printf(“请输入第%d个值”,i+1); p = (Data)malloc(sizeof(Data)); scanf("%d",&p->num); p->next = r; if (r == NULL) { r = p; } else { q->next = p; } q = p; } return r; } //遍历循环链表 void print(Data list) { Data r = list; do { printf("%d\t",r->num); r = r->next; } while (r != list); } void main() { Data head; head = create(5); print(head); system(

循环链表C语言实现

北慕城南 提交于 2019-11-26 15:45:35
按照单链表的设计,稍加改动。和单向链表不一样的地方,头节点不指向NULL,而是指向自己head 循环链表的判满 1)判断next是不是头结点,2)判断size /* * CycleLinkList.h * * Created on: 2019年7月24日 * Author: Administrator */ #ifndef SRC_CYCLELINKLIST_H_ #define SRC_CYCLELINKLIST_H_ #define CIRCLELINKLIST_TRUE 1 #define CIRCLELINKLIST_FALSE 0 /** * 1、循环链表,带头节点,初始化的时候,和单向链表不一样的地方,头节点不指向NULL,而是指向自己head * 2、循环链表的判满 1)判断next是不是头结点,2)判断size * */ //链表的小节点 typedef struct CIRCLELINKNODE { struct CIRCLELINKNODE *next; }CircleLinkNode; //结构体 typedef struct CIRCLELINKLIST { CircleLinkNode head; int size; }CircleLinkList; //比较回调 typedef int(*COMPARENODE)(CircleLinkNode *,

【数据类型】链表那些事儿

左心房为你撑大大i 提交于 2019-11-26 14:13:58
大家好(๑╹◡╹)ノ”,今天本蒟蒻要和大家讲讲链表的那些事儿~~~ 首先可以直接的告诉大家一件事情: 指针是程序设计中最TMD难理解也是最TMD有难度的部分,没有之一! 这使的指针和图论、数论成为了各位Oier肩上的三座大山。 而链表又是指针当中的精华,我们一起来了解一下 写在前面 本蒟蒻学习链表时内心受到了无限的伤害 QAQQAQ ,希望大家不要重蹈我的覆辙 qwqqwq 链表的基础知识 链表是一个动态的存储空间,在开始前无需考虑空间大小的问题,优点是删除或添加时方便,省内存,缺点是查找引用困难。想象一下一个巨大的单链表从头指针查找元素的情境,瞬间就明白了。链表的主要应用有约瑟夫问题,以及各类易TLE/MLE题目上。 一个链表的元素内分为连2个区域:数据域和指针域。数据域是存放数值的地方,指针域是指向下一个链表元素的指针,两者缺一不可,但有时一个链表元素可能有多个数据域和多个指针域。 链表的元素通常情况下是一个结构体,形如: struct Node { int data(可以有很多个); Node *next(可以有不止一个); }; Node *head,*p; 这样形成了一个层层嵌套的空间,值得一提的是下面的这种定义是非法的: struct Node { int data; Node next; }; Node *head,*p; 这样会创造一个无限循环的空间,编译不会通过。

数据-第10课-循环链表

好久不见. 提交于 2019-11-26 13:50:32
第10课-循环链表 l 单链表的局限 (1) 单链表可以用于表示任意的线性关系。 (2) 有些线性关系是循环的,即没有队尾元素 ,即没有队尾元素。 1. 循环链表的定义 将单链表中最后一个数据元素的next指针指向第一个元素。 2. 循环链表拥有单链表的所有操作 (1) 创建链表。 (2) 销毁链表。 (3) 获取链表长度。 (4) 清空链表。 (5) 获取第pos个元素操作。 (6) 插入元素到位置pos。 (7) 删除位置pos。 例子--将单链表改写成循环链表 CircleList.h #ifndef _CIRCLELIST_H_ #define _CIRCLELIST_H_ typedef void CircleList; typedef struct _tag_CircleListNode CircleListNode; struct _tag_CircleListNode { CircleListNode* next; }; CircleList* CircleList_Create(); void CircleList_Destroy(CircleList* list); void CircleList_Clear(CircleList* list); int CircleList_Length(CircleList* list); int CircleList

3-3单项循环链表

霸气de小男生 提交于 2019-11-26 11:00:37
单向循环链表 单链表的一个变形是单向循环链表,链表中最后一个节点的next域不再为None,而是指向链表的头节点。 实现 class Node(object): """节点""" def __init__(self, item): self.item = item self.next = None class SinCycLinkedlist(object): """单向循环链表""" def __init__(self): self._head = None def is_empty(self): """判断链表是否为空""" return self._head == None def length(self): """返回链表的长度""" # 如果链表为空,返回长度0 if self.is_empty(): return 0 count = 1 cur = self._head while cur.next != self._head: count += 1 cur = cur.next return count def travel(self): """遍历链表""" if self.is_empty(): return cur = self._head print cur.item, while cur.next != self._head: cur = cur.next