- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二章 线性表 作业评讲 2.1 试描述头指针、头结点、开始结点的区别、并说明头指针和头结点的作用。 2.2 何时选用顺序表、何时选用链表作为线性表的存储结构为宜? 2.3 在顺序表中插入和删除一个结点需平均移动多少个结点?具体的移动次数取决于哪两个因素? 2.4 为什么在单循环链表中设置尾指针比设置头指针更好? 2.5 在单链表、双链表和单循环链表中,若仅知道指针p指向某结点,不知道头指针,能否将结点*p从相应的链表中删去?若可以,其时间复杂度各为多少? 2.6 设有一个双链表,每个结点中除有prior、data和next三个域外,还有一个访问频度域freq,在链表被起用之前,其值均初始化为零。每当在链表进行一次LocateNode(L,s)运算时,令元素值为x的结点中freq域的值加1,并调整表中结点的次序,使其按访问频度的递减序排列,以便使频繁访问的结点总是靠近表头。试写一符合上述要求的LocateNode运算的算法。 2.7 写一算法在单链表上实现线性表的ListLength(L)运算。 2.8 已知由单链表表示的线性表中,含有三类字符的数据元素(如:字母字符、数字字符和其它字符),试编写算法构造三个以循环链表表示的线性表,使每个表中只含同一类的字符,且利用原表中的结点空间作为这三个表的结点空间,头结点可另辟空间。 2.9 假设在长度大于1的单循环链表中,既无头结点也无头指针。s为指向链表中某个结点的指针,试编写算法删除结点*s的直接前趋结点。 2.10设顺序表L是一个递增有序表,试写一算法,将x插入L中,并使L仍是一个有序表。 2.11 写出以下链表操作的算法 1)创建一个空的双向循环链表 status CreateList_Dul(DuLinkList L); 2)取得双向循环链表中第i个数据元素的位置指针 status GetElemP_Dul(DuLinkList L, int i); 3)将单链表置逆 status ReverseList_L(LinkList L); 2.1 试描述头指针、头结点、开始结点的区别、并说明头指针和头结点的作用。 开始结点是指链表中的第一个结点,没有直接前趋的那个结点。 链表的头指针是一指向链表开始结点的指针(没有头结点时),单链表由头指针唯一确定,因此单链表可以用头指针的名字来命名。 头结点在链表的开始结点之前附加的一个结点。有了头结点之后,头指针指向头结点,不论链表否为空,头指针总是非空。而且头指针的设置使得对链表的第一个位置上的操作与在表其他位置上的操作一致(都是在某一结点之后)。 2.11 写出以下链表操作的算法1)创建一个空的双向循环链表 status CreateList_Dul(DuLinkList L) { L=(dulnode *)malloc(sizeof(dulnode)); if(!L) exit(OVERFLOW); L-next=L; L-prior=L; return(OK); //见图2.14(b) P36 } 2.11 写出以下链表操作的算法2)取得双向循环链表中第i个数据元素的位置指针 elemtype * GetElemP_Dul(DuLinkList L, int i) {elemtype *p; int a=1; if (i0) return ERROR; else {p=L; p=p-next; while(aip!=NULL) {p=p-next; a++;} } If (a==i)return(p); else return(ERROR); } 2.11 写出以下链表操作的算法3)将单链表置逆 status ReverseList_L(LinkList L) {Lnode *p1,*p2,*p3; If(L-next==NULL) return OK; else { p1=L; P2=L-next; p1-next=NULL; P3=p2-next; While( p2!=NULL) {p2-next=p1; p1=p2;p2=p3; if(p2!=NULL) p3=p3-next;} L=p1; return OK; } } * 作业: 2.5、 2.7、2.9、2.11做在作业本上,交,其余堂下练习 2.2 何时选用顺序表、何时选用链表作为线性表的存储结构为宜? 1.基于空间的考虑。当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。 2
文档评论(0)