- 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试描述以下三个概念的区别:头指针、头结点、首元素结点。 解答
头指针
AlA2AnA
Al
A2
An
A
头结点 首元素结点
2、已知顺序表递增有序,编写一个算法,将 x插入到线性表的适当位置上,以保持线性表
的有序性。
解答
Int Insert x( SeqList *L? ElemT?e x 卜
Int If k;*j
Ifi L^last = MAXSIZE 一 1 ) return 0;*
For(k=0 last xL- eleni Tk] J++);+
For (i=L-last; !=k;i
L- elemfi+1 |=L-elem [il 护
L 今 el?n[kl=x;p
L^last++; *
S为指向链3、假设有一个循环链表的长度大于 1
S为指向链
表某个结点的指针,试编写算法在链表中删除指针 S所指结点的前驱结点。
解答
int DelNode(LinkList s,elem Type *e) {
LinkList p,q;
p=s;
while(p-next-next!=s) p=p-next;
q=p-next;
p-next=s; *e=q-data;
Free(q);
}
第七周
1?写一算法删除单链表中第k个结点
Void DelNoK(LinkList L,int k,dataelem *e)
{ int i=0;
lin kList p=L;
while(p ik-1)
{
p=p-n ext;
i++;
}
if(p)
{ *e=p-n ext-data;
q=p-n ext;
p_n ext=q _n ext;
free(q);
}
else
printf( “ ERROR k” );
}
2?写一算法将单链表倒置。
Void ResList(Li nkList L)
{
Lin kList p,q;
P=L-n ext;
lf(!p)
{ printf( “ empty list ” );
return;
}
else
{
q=p-n ext;
p-next=NULL;〃新表的表尾
while(q)//从第二个元素开始头插法加入元素
{
p=q _n ext;
q-n ext=L-n ext;
L_n ext=q;
q=p;
}
}
第八周作业
1?按图3.1(b)所示铁道(两侧铁道均为单向行驶道)进行车厢调度,回答:
如进站的车厢序列为 123,则可能得到的出站车厢序列是什么?
解答:可能得到的序列有: 123 132 213 231 321
如进站的车厢序列为 123456,能否得到435612和135426的出站序列,并说明原因。(即 写出以“ S”示进栈、以“ X表示出栈的栈操作序列)。
解答:435612不能得到,第一个出栈的是 4,则须1S2S3S4S4X3X,后5S5X6S6X,栈里只有
1 2,但1在栈底,不能先于2出栈;135426可得到,进行下列操作:
1S1X2S3S3X4S5S5X4X2X6S6X
2?试写一个算法,判断依次读入的一个以 @为结束符的字母序列,是否为形如序列1 序
列2模式的字符序列。其中序列1和序列2中都不含字符’且序列2是序列1的逆序 列。例如,’a+bb+0是属该模式的字符序列,而 1 + 3 3 — 1 则不是。
解答:
int ResList()
{
Char *str,ch;
Stack S;
In iStack(S);
Scanf( “ %c,ch)
While(ch!= )
{
Push(S,ch);
Scanf( “ %c,ch);
}
Scanf( “ %c” ,ch);
While(ch!= @ !EmptyStack(S))
{
lf(ch==GetTop(S))
{
Pop(S,ch);
Scanf( “ %c” ,ch);
}
Else
Return 0;
}
If(ch== @ EmptyStack(S))
Return 1;
Else
Return 0;
3?简述以下算法的功能(其中栈和队列的元素类型均为 int):
void proc_1(Stack S)
{ int i, n, A[255];
n=0;
while(!EmptyStack(S))
{n++; Pop(S, A[ n]);}
for(i=1; i=n; i++)
Push(S, A[i]);
}
解答:通过数组 A将栈S置逆
void proc_2(Stack S, int e)
{ Stack T; int d;
Ini tStack(T);
while(!EmptyStack(S))
TOC \o 1-5 \h \z { Pop(S, d);
if (d!=e) Push( T, d);
}
whil
文档评论(0)