用单循环链表存储一个环上的数据,并计算任意两个相邻元素之差是否超过2
2005-09-03 10:17
405 查看
#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);};
}
#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);};
}
相关文章推荐
- 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一, 现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一,现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一, 现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。
- 编写函数int stat(int a[],int n,int c[][2])。a指向的数组中保存了由n个1位整数组成的数列(n为偶数)。函数从前至后依次将a数组中每两个相邻元素拼成一个不超过2位
- 采用邻接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径的算法。
- 【学习点滴-数据结构-单链表】交换单链表中任意两个元素
- 二、 编写函数int stat(int a[],int n,int c[][2])。a指向的数组中保存了由n个1位整数组成的数列(n为偶数)。函数从前至后依次将a数组中每两个相邻元素拼成一个不超过2位
- 要完整准确的 均以单链表作存储结构 试编写算法将A表和B表归并成一个按元素值递减有序的线性表C 【数据结构】假设有两个按元素值递增有序的线性表A和B 并要求利用原表的空间存放C。谁会么
- 12、一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。 请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 汇编语言三 设数组ARRAY存储多个8位无符号数据,其中第一个字用于存放数据个数,试编写程序求数组元素之和,将结果存放在AX中,若计算的和超过16位数表示的范围,则给出溢出标志DX=-1,否则D
- 数据结构习题分析:已知由一个线性链表表示的线性表中含有三类字符的数据元素,是编写算法将该线性表分割为三个循环链表,其中每个。。。。。
- 编写函数int stat(int a[],int n,int c[][2])。a指向的数组中保存了由n个1位整数组成的数列(n为偶数)。函数从前至后依次将a数组中每两个相邻元素拼成一个不超过2位的
- 【LeetCode91-100】编码种数,逆转单链表,IP地址转化,中序遍历二叉树,生成二叉搜索树,计算二叉树个数,交叉string【hard】,判断二叉搜索树是否合法,恢复二叉树(有两个元素被交换)
- 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一, 现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。
- 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右),某一个元素也加一,现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。
- 编写函数int stat(int a[],int n,int c[][2])。a指向的数组中保存了由n个1位整数组成的数列(n为偶数)。函数从前至后依次将a数组中每两个相邻元素拼成一个不超过2位的
- 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一, 现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。