欢迎来到天天文库
浏览记录
ID:36223052
大小:32.50 KB
页数:11页
时间:2019-05-07
《数据结构应用new》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、数据结构应用数据结构应用数据结构应用数据结构应用数据结构应用数据结构应用– 1. 有一个有n个结点的单链表,设计一个函数将第i-1个结点与第i个结点互换,但指针不变。– 2. 设计一个函数,查找单链表中数值为x的结点。– 3. 已知一个单链表,编写一个删除其值为x的结点的前趋结点的算法。– 4. 已知一个单链表,编写一个函数从此单链表中删除自第i个元素起的length个元素。– 5. 已知一个递增有序的单链表,编写一个函数向该单链表中插入一个元素为x的结点,使插入后该链表仍然递增有序。– 6. 已知一个单链
2、表,编写一个函数将此单链表复制一个拷贝。– 7. 有一个共10个结点的单链表,试设计一个函数将此单链表分为两个结点数相等的单链表。– 8. 与上题相同的单链表,设计一个函数,将此单链表分成两个单链表,要求其中一个仍以原表头指针head1作表头指针,表中顺序包括原线性表的第一、三等奇数号结点;另一个链表以head2为表头指针,表中顺序包括原单链表第二、四等偶数号结点。 – 9. 已知一个指针p指向单循环链表中的一个结点,编写一个对此单循环链表进行遍历的算法。 – 10. 已知一个单循环链表,编写一个函数,将所有箭头方向取反。 –
3、 11. 在双链表中,若仅知道指针p指向某个结点,不知头指针,能否根据p遍历整个链表?若能,试设计算法实现。– 12. 试编写一个在循环双向链表中进行删除操作的算法,要求删除的结点是指定结点p的前趋结点。 – 1. 解:本题的算法思想是:要使结点互换而指针不变,只要将两个结点的数据进行交换即可。实现本题功能的函数如下: void exchange(node *head,int i,n) { node *p,*q; int data; if(i>n)
4、 printf("error!"); else { p=head; for(int j=1;jnext; q=p->next; data=q->data; q->data=p->data; p->data=data; }} – 2. 解:实现本题功能的函数如下: void search(node *h
5、ead,int x) { node *p; p=head; while(p->data!=x && p!=NULL) p=p->next; if(p!=NULL) printf("结点找到了!"); else printf("结点未找到!"); } –
6、3. 解:本题的算法思想是:先找到值为x的结点*p和它的前趋结点*q,要删除*q,只需把*p的值x放到*q的值域中,再删除结点*p即可。实现本题功能的函数如下: void delete(node *head,int x) { node *p,*q; q=head; p=head->next; while((p!=NULL) && (p->data!=x)) {
7、 q=p; p=p->next; }if(p==NULL) printf("未找到x!"); else if(q==head) printf("x为第一个结点,无前趋!"); els
此文档下载收益归作者所有