老邱链表分册Word格式.docx
《老邱链表分册Word格式.docx》由会员分享,可在线阅读,更多相关《老邱链表分册Word格式.docx(83页珍藏版)》请在冰点文库上搜索。
structNode*next;
//指针域
}LNode,*LinkList;
2.设有链表A和B,其中的数据内容均为整型数值,且都按增序排列,生成新的链表C、D,满足下列要求:
(1)
(C中元素为A和B的并集)
(2)D=A-B(D中元素为在A中出现但不在B中出现的元素)
且C、D元素都按增序排列。
编程要求:
输入:
键盘输入链表A的数据元素(至少5个)
键盘输入链表B的数据元素(至少5个)
输出:
屏幕分别打印链表A,B,C,D的数据元素。
3.设有链表A和B,其中的数据内容均为整型数值,且都按增序排列,生成新的链表C、D,满足下列要求:
(C中元素为A和B中都出现的元素)
(2)D中元素为A中元素的逆序排列
屏幕分别打印链表A,B,C、D的数据元素。
4.约瑟夫(Joseph)问题
[问题描述]
约瑟夫(Joseph)问题的一种描述是:
编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数),一开始任选一个整数作为报数上限m,从第一人开始按顺时针方向从自1开始顺序报数,报到m时停止报数。
报m的人出列,将他的密码作为新的m值,从他的顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止,设计一个程序求出出列顺序。
[基本要求]
采用单向循环链表模拟此过程,按照出列的顺序印出各人的编号
[测试数据]
m的初值为6;
n=7,7个人的密码依次为:
3,1,7,2,4,8,4,正确的出列顺序应为6,1,4,7,2,3,5。
[实验提示]
单向循环链表的结点类型定义参照如下:
typedefstructLNode
{
intcode;
//定义整型变量code用来存放序号
intkey;
//定义整型变量key用来存放密码
structLNode*next;
}LNode,*LinkList;
5.一元多项式的相加。
利用两个带头结点的单链表La和Lb分别存储两个一元多项式A(x)和B(x),对这两个一元多项式求和,输出结果。
6.已知由一个线性链表表示的线性表中含有3类字符的数据元素(如:
字母,数字和其他字符),试编写算法将该线性链表分割为3个循环链表,其中每个循环链表均只含有一类字符。
编程要求:
键盘输入一串字符,含上述的3类字符,各类字符数目5个以上
屏幕分别打印循环链表A,B,C的元素。
7.已知线性表中的元素以值递增顺序排列,并以双向链表为存储结构。
试实现以下功能:
删除表中所有[MinNum,MaxNum]范围内的数据。
键盘输入链表的数据元素(至少5个)
键盘输入MinNum,MaxNum值
屏幕打印链表操作的结果。
/*
*/
#include<
stdio.h>
iostream.h>
stdlib.h>
typedefintElemType;
typedefstructLNode
{
structLNode*next;
//
(1).voidCreatList(LinkList&
voidCreateList(LinkList&
L,intn)
LinkListp,r;
inti;
//srand(time(0));
L=(LinkList)malloc(sizeof(LNode));
L->
next=NULL;
r=L;
for(i=0;
i<
n;
i++)
{
p=(LinkList)malloc(sizeof(LNode));
//p->
data=rand()%100+1;
cin>
>
p->
data;
r->
next=p;
r=p;
p->
}
}
//
(2).voidListPrint(LinkListLa)
voidPrintList(LinkList&
L)
LinkListp;
p=L->
next;
while(p)
cout<
<
data<
"
"
;
p=p->
cout<
endl;
//(3).voidListInsert(LinkList&
intListInsert(LinkList&
L,inti,ElemType&
e)
intj;
LinkListp,s;
p=L;
j=1;
while(p&
&
j<
i)
p=p->
++j;
if(!
p||j>
return-2;
s=(LinkList)malloc(sizeof(LNode));
s->
data=e;
next=p->
p->
next=s;
return0;
//(4).voidListDelete(LinkList&
intListDelete(LinkList&
LinkListp,q;
while(p->
next&
(p->
next)||j>
q=p->
next=q->
e=q->
free(q);
//(6).intListLength(LinkListL)//求链表L的表长
intListLength(LinkListL)
inti=0;
i++;
returni;
//(7).voidGetElem(LinkListL,inti,ElemType&
intGetElem(LinkList&
return-2;
e=p->
returne;
intmain()
LinkListL;
L=(LinkList)newLNode;
intn;
inputn:
cin>
CreateList(L,n);
PrintList(L);
intpos;
Deletepos:
pos;
ElemTypee;
ListDelete(L,pos,e);
Delete:
e<
Insertpos:
Insertelem:
e;
ListInsert(L,pos,e);
Getpos:
pos"
pos<
:
GetElem(L,pos,e)<
ListLength:
ListLength(L)<
5
12345
54321
4
5431
2
69
569431
3
pos3:
Pressanykeytocontinue
(1)(C中元素为A和B中都出现的元素)
p)
None"
return;
voidCreateSq(LinkList&
voidAUB(LinkListLa,LinkListLb,LinkList&
Lc)
LinkListpa,pb,r;
pa=La->
pb=Lb->
Lc=(LinkList)newLNode;
Lc->
r=Lc;
while(pa&
pb)
if(pa->
pb->
data)
{
p=(LinkList)newLNode;
p->
data=pa->
r->
r=p;
pa=pa->
}
elseif(pa->
data>
data=pb->
pb=pb->
else
pa)
next=pb;
else
next=pa;
voidPrint(LinkListLa,LinkListLb,LinkListLc)
La:
PrintList(La);
Lb:
PrintList(Lb);
Lc:
PrintList(Lc);
LinkListLa;
CreateSq(La);
LinkListLb;
CreateSq(Lb);
LinkListLc;
AUB(La,Lb,Lc);
Print(La,Lb,Lc);
1
6
7
8
9
10
2478910
1234578910