- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
北理工数据结构作业1北理工数据结构作业1
第二章作业
在什么情况下用顺序表比链表好?
答:
当需要对线性表进行随机存取时,顺序表比链表好,因为顺序表存储结构的特点是逻辑上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可以用一个简单、直观的公式来表示。
已知L是带表头结点的非空单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。
删除P结点的直接后继结点的语句序列是_(11)(3)(14)_。
删除P结点的直接前驱结点的语句序列是_(10)(12)(8)(3)(14) 。
删除P结点的语句序列是 (10)(12)(7)(3)(14)_。
删除首元结点的语句序列是_(12)(11)(3)(14)_。
删除尾元结点的语句序列是_(9)(11)(3)(14)_。
p = p-next;
p-next = p;
p-next = p-next-next;
p = p-next-next;
while ( p!=NULL ) p=p-next;
while ( q-next!=NULL ) { p=q; q=q-next; }
while ( p-next!=q ) p=p-next;
while ( p-next-next!=q ) p=p-next;
while ( p-next-next!=NULL ) p=p-next;
q=p;
q=p-next;
p=l;
l=l-next;
free(q);
算法设计。设顺序表va中的数据元素递增有序,请设计一算法,将x插入到顺序表的适当位置,以保持该表的有序性。
typedef struct{
ElemType *elem;
int length;
int listsize;
}Sqlist;
Status ListInsert_Sq(Sqlist va , ElemType x){
if(va.length==va.listsize) return ERROR;
for(i=va.length-1;i=0xva.elem[i];i--) va.elem[i+1]=va.elem[i];
va.elem[i+1]=x;
va.length++;
return OK;
}
算法设计。请设计一个算法,实现顺序表的原地逆置,即利用原表的存储空间将线性表(a1,a2,……,an)逆置为(an,……,a2,a1)。
typedef struct{
ElemType *elem;
int length;
int listsize;
}Sqlist;
void ListReverse_Sq(Sqlist L){
int i, j, x;
for(i=0,j=L.length-1;ij;i++,j--){
x=L.elem[j];
L.elem[j]=a.elem[i];
L.elem[i]=x;}
}
算法设计。请设计一个算法,实现单链表的原地逆置。
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*Linklist;
void LinkReverse(Linklist L){
Linklist p,q;
p=L﹣next;
L﹣next=NULL;
while(p){
q=p;
p=p﹣next;
q﹣next=L﹣next;
L﹣next=q;
}
return L;
}
实验一
1、采用单向环表实现约瑟夫环。
请按以下要求编程实现:
从键盘输入整数m,通过create函数生成一个具有m个结点的单向环表。环表中的结点编号依次为1,2,……,m。
从键盘输入整数s(1=s=m)和n,从环表的第s个结点开始计数为1,当计数到第n个结点时,输出该第n结点对应的编号,将该结点从环表中消除,从输出结点的下一个结点开始重新计数到n,这样,不断进行计数,不断进行输出,直到输出了这个环表的全部结点为止。
例如,m=10,s=3,n=4。则输出序列为:6,10,4,9,5,2,1,3,8,7。
#includestdio.h
#includemalloc.h
#define ERROR 0
typedef struct LNode{
int num;
struct LNode *next;
}LNode,*Linklist;
void main()
{
int m,s,n,i,j;
Linklist head,p,q;
printf(input m:\n);
scanf(%d,m);
printf(input s and n:\n);
scanf(%d %d,s,n);
if(!(head=(Linklist
文档评论(0)