#include<iostream.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node *next;
}Lnode,*LinkList;
//假设下面的单循环链表均为带头结点,而且L指向尾结点。
void CreatLinkList(LinkList &L)
{//建立一个单循环链表L,数据为整数,数据由键盘随机输入。
int i;
LinkList head;
L=(LinkList)malloc(sizeof(struct node));
L->next=L;
head=L;
cout<<"please input the data of the node "<<endl
<<"input 0 means end :";
cin>>i;
while(i)
{
LinkList p=(LinkList)malloc(sizeof(struct node));
if(!p)
{
cout<<"alloctation error"<<endl;
exit(1);
}
p->data=i;
L->next=p;
p->next=head;
L=p;
cout<<"please input the data of the node "<<endl
<<"input 0 means end :";
cin>>i;
}
}
void PrintLinkList(LinkList L)
{//输出单循环链表L的数据元素。
LinkList temp=L->next;
cout<<"The List Is :"<<endl;
while(temp->next!=L->next)
{
cout<<temp->next->data<<endl;
temp=temp->next;
}
}
int LinkListLengh(LinkList L)
{//计算单循环链表L的数据元素个数。
int i=0;
LinkList temp=L->next;
while(temp->next!=L->next)
{
i++;
temp=temp->next;
}
return i;
}
void CalculateLinkList(LinkList L, int i)
{int a,b,k=0;
if((i>LinkListLengh(L)) || (i<1) )
{
cout<<"输入错误!"<<endl;
return ;
}
LinkList temp=L->next;
while((temp!=L) && (k<i))
{
k++;
temp=temp->next;
}
a=temp->data;
b=temp->next->data;
cout<<a<<"-"<<b<<"="<<a-b<<endl;
if((a-b)>=-2&&(a-b)<=2) cout<<"从第"<<i<<"位开始的相临的两个元素的绝对值不超过2!"<<endl;
else cout<<"从第"<<i<<"位开始的相临的两个元素的绝对值超过2!"<<endl;
}
void main()
{//调用上面的各函数,运行并检验程序是否正确。
LinkList L;
int i;
CreatLinkList(L);
PrintLinkList(L);
cout<<"链表长度为:"<<LinkListLengh(L)<<endl;
cout<<"输入要计算的数字位数:"<<endl;
cin>>i;
CalculateLinkList(L, i);
cout<<"结束请按q!"<<endl;
if(_getch()=='q') cout<<"再见"<<endl;
else {while(1);};
}
分享到:
相关推荐
合并有序单循环链表,不重新申请存储空间; 创建有序单循环链表,并指向尾结点; 新单循环链表的指针指向尾结点;
约瑟夫环的问题描述 问题描述:编号为1,2… n的n个人按顺时针方向围坐一圈,每人持有...利用单循环链表作为存储结构模拟此过程; ⑵.键盘输入总人数、初始报数上限值m及各人密码; ⑶.按照出列顺序输出各人的编号。
自己在实验课是做的。主要是单循环链表,有带头结点和不带头结点两种情况。 文件里分别进行了实现。有两个文件
设计算法判断单循环链表是否每个结点的值都是偶数,建立链表,判断,显示。 对任意输入的一组数据,建立一个递增有序的单链表。 将单链表L中的奇数项和偶数项结点分解开,并分别连成一个单链表。 用递增有序的链表A...
循环链表 实现约瑟夫环 java 自己写的 测试通过 有注释
6、删除单循环链表中的第4个数据元素和第8个数据元素,给出删除成功或失败的信息,并输出单循环链表中的各元素值; public interface IList { public void clear(); public boolean isEmpty(); public int length...
单循环链表
使用c语言中的循环链表及结构体实现约瑟夫环问题
设计算法以判断一个带头结点的单循环链表是否满足这样的条件:其中每个结点的元素值与其序号的差的绝对值不大于3。若成立, 返回TRUE, 否则返回FALSE。利用递增有序的单循环链表表示集合, 分别求两个链表表示的集合...
几乎不使用库函数,利用数据结构知识和C语言来写的循环链表电话本小程序
数据结构C语言版(将1个单链表变成3个单循环链表)
VC++2012编程演练数据结构《2》单循环链表与约瑟夫问题
单链表的基本操作 一)建立单链表+求长度+显示 (1) 由键盘逐个输入正整数,...建立一个带头结点的线性链表,用以存放输入的二进制数,链表中每个结点的data域存放一个二进制位,并在此链表上实现对二进制数加1的运算。
用循环链表的方式实现约瑟夫环,下面是部分代码, typedef struct node { int key; int seatnum; struct node *next; }node,*linklist; void createlist(linklist&l,int n) { l=(linklist)malloc(sizeof(node));...
设计算法以判断一个带头结点的单循环链表是否满足这样的条件,其中每个节点的元素值与其序号的差的绝对值不大于3.若成立,返回TRUE,否则返回FALSE,任务利用递增有序地单循环链表表示集合,分别求两个链表表示的集合...
(4)输出单循环链表中每一个结点元素 (5)指定位置插入某个元素 (6)查找第i个结点元素的值 (7)查找值为e 的结点,并返回该结点指针 (8)删除第i个结点 (9)销毁单循环链表 2、实验要求 (1)程序中用户可以...
C++实现链表模板(链表项的数据元素可以为任意类型):链表项的插入、删除、链表的打印、两个链表的连接 开发环境为VS2010
循环链表可以通过一个指针来表示,并且可以在任意节点上进行插入、删除和遍历操作。 循环链表的节点结构通常包含两部分:数据域和指针域。数据域用于存储节点的数据,指针域用于指向下一个节点。 在循环链表中,...
课件主要讲了循环链表,双向链表的操作,插入,删除等 循环链表、双向链表及线性表应用示例
通过循环链表实现约瑟夫环问题,用c语言实现。属于数据结构部分内容