[code=C++] /*
author:jiangxin
Blog:http://blog.csdn.net/jiangxinnju
Function:method of Josephus question
*/
#include <iostream>using namespace std;struct node
{
int seq;
node *next;
};
typedef struct node NODE;void test_Josephus()
{
/*假设共有n人,从第s个人开始数数,每数到m该人出列,后面的人重新开始数,知道全部人出列*/
int n,s,m;
NODE *head,*last,*current,*prev;
...
对于单链表,因为每一个结点仅仅存储了向后的指针。到了尾标志就停止了向后链的操作,这样,其中某一结点就无法找到它的前驱结点了。
对于单链表的操作大家能够看我的这篇博客http://blog.csdn.net/zxnsirius/article/details/51183055我们将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成了一个环。这样的头尾相接的单链表称为单循环链表,简称循环链表。以下是循环链表的综合操作的样例程序执行结果/*‘)...
循环控制语句更改执行的正常序列。当执行离开一个范围时,所有在该范围中创建的自动对象都会被销毁。C++ 提供了下列的控制语句。点击链接查看每个语句的细节。控制语句描述break 语句终止 loop 或 switch 语句,程序流将继续执行紧接着 loop 或 switch 的下一条语句。continue 语句引起循环跳过主体的剩余部分,立即重新开始测试条件。goto 语句将控制转移到被标记的语句。但是不建议在程序中使用 goto 语句。注意:您可以按 Ctrl ...
第四题 单利和复利// 单利投资和复利投资 本金为100元int count = 1;// 本金int principal = 100;// A的第一年的收获float a_alone = principal * 0.1;// B第一年的收获 利息float b_double = principal * 0.05;// b 收获的总和float b_Allhavest = b_double;while (b_Allhavest < a_alone * count){b_double += b_double * 0.05;b_Allhavest += b_double;cout << "b的利息-------" << b_double << endl;count++;}int year =...
好久没有写博客了,前段时间做项目需要一个缓冲机制用来缓存视频帧。下面是自己实现的视频缓冲类。在此类中用循环队列实现了视频帧数据的入队、出队。在类中使用互斥对象避免出入队出现错误。下面是代码。 /*****************头文件****************/using namespace std;#define MAXSIZE 50typedef struct
{int iSize;//数据的大小char *cdata;
}bufData;
typedef struct
{bufData mdata[MAXSIZE];int iRead;//队头int iWrite...
1. 几种智能指针1. auto_ptr: c++11中推荐不使用他(放弃)2. shared_ptr: 每添加一次引用 就+1,减少一次引用,就-1;做到指针进行共享3. unique_ptr: 一个指针同时只能有一个使用者使用4. weaked_ptr: 与shared_ptr搭配使用1.1 weak_ptr参考:https://zh.cppreference.com/w/cpp/memory/weak_ptrstd::weak_ptr 是一种智能指针,它对被 std::shared_ptr 管理的对象存在 非拥有性(“弱”)引用。在访问所引用的对象前必须 先转换为 ...
map,vector 等容器内容的循环删除问题(C++) map,vector等容器的循环删除不能用普通的方法删除:for(auto p=list.begin();p!=list.end();p++)list.erase(p);类似的方式,会出错的,不信你调试试试 :)这里使用了一个` iterator` 的一个自增/自减 ,来巧妙的实现了, 删除当前的`iterator,` 但是有给当前的`iterator`赋值为其下一个的操作,不至于删除后,当前的 `iterator` 就失效了! 代码: 1 #include <iostream>2 #include <vector>3 #inc...
队列(queue)是一种限定存取位置的线性变。他允许在表的一端插入,在另一端删除。这个和计算机调度策略中的先来先服务FCFS(First Come/First Served)是一样的。队列中可以插入的一端为队尾(rear),允许删除的一端称为队头(front)。队列也分为两种,一种是用数组的存储表示,一种是基于链表的存储表示。基于数组的存储表示的队列被称为顺序队列。其数据成员包括,一维数组elements用来存储数据,指针front和rear用来指示队尾队...
循环双向链表的增删查改等基本操作#include<iostream>
#include<assert.h>
using namespace std;
typedef int DataType;
struct ListNode
{DataType _data;ListNode* _prev;ListNode* _next;ListNode(const DataType& x):_data(x),_prev(NULL),_next(NULL){}ListNode():_data(0),_prev(NULL),_next(NULL){}
};
class List
{
private:ListNode _head;
public:List(){_head._prev=&_head;_head._next=&_head;}~List(){clear();}void ...
首先是单链表(带附加表头),实现类代码如下: 1 template<class T>2struct LinkNode{//链表节点 3 T data;4 LinkNode *link;5 LinkNode(const T& args,LinkNode<T> *ptr=NULL){6 data=args;7 link=ptr;8 }9};10 11 template<class T>12class List{//带附加头节点的单链表 13protected:14 LinkNode<T> *first;//链表头指针 15public:16 List(){17 first=new LinkN...
问题代码#include<bits/stdc++.h>
usingnamespace std;
int main()
{string s="a";printf("%d\n",s.size()-5);cout<<s.size()-5<<endl;for(int i=0;i<=s.size()-5;i++)printf("ViVid-BinGo\n");system("pause");return0;
} 以上是问题代码的运行结果,这是就会有问题出现了。 ① 字符串 s 的大小为 1 ,那么 s.size() - 5 == -4。但是用 print("%d") 和 cout 输出 s.size() - 5 的结果分别为 -4 和 18446744073709551612 ,...
队列(queue)是一种只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。因为已经限制了插入和删除的位置,所以对于队列,插入和删除时只需要考虑满和空两种状态 顺序队列的操作分别在队头和队尾两端进行。在出队时,队头_front和队尾_rear的值都是只增加(向队列长度_size)靠近;如果仅通过_rear == _si...
很多初学者往往对递归迷惑不解,也在这上面花了不少的时间。其实教材上的例子很经典,只是它说的有一些唠叨了。初学者会看的头大的。编程是解决问题的,而现实中很多的问题都是比较简单的,没有象汉诺塔那么复杂。我们也不必追究递归到底是怎样实现的,我们只是要会用递归,会用递归来为我们解决一些问题,这就行了。
首先来看一个例子:
有一个Febonacci序列:
1,1,2,3,5,8,13,,21,34........
它的问题是:求这个...
迭代器自身是不知道是否“失效”的,它本质上只是一个迭代对象的包装。我对“失效”的理解是,在创建一次迭代的开始时,这个迭代器应该迭代的所有元素就已经确定了,换句话说,有一个确定的迭代序列;如果说在迭代的过程中出现了与已经确定的迭代序列不同的序列,那么就可能会认为这个迭代器失效了。具体到不同的容器,迭代器失效的情况也是不一样的,会存在一些只会使指向容器中某个特定元素失效的情况,也有可能使指向所有元素的...
题目链接:数组元素循环右移问题
题目描述:
一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A?0??A?1???A?N?1??)变换为(A?N?M???A?N?1??A?0??A?1???A?N?M?1??)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
输入格式:
每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N...