山东理工大学 链表练习题答案
来源:互联网 发布:淘宝网如何装修店铺 编辑:程序博客网 时间:2024/04/30 03:45
使用需明白,我提供的代码并不是给大家抄的,而是给大家一个思路来做题。如果你一开始就会意错了的话(只会抄的话),你的水平永远不会得到大的飞跃,如果你还对自己有严格的要求的话,就可以略微参考一下。代码有什么不好或不对的地方欢迎提出。有什么不懂的地方可以尽可能的提出来,我会做解答。可以当面叫我解答(提供给我小组的成员)。(天啊!说的好官方啊!快被自己唬住了!)
数据结构实验之链表一:顺序建立链表
#include<cstdio>#include<cstring>#include<cstdlib>#include <iostream>using namespace std;struct node{ int data; struct node *next;};int main(){ int i, n, m; struct node *head, *p, *q; scanf ( "%d", &n ); head = NULL; for ( i = 1;i <= n; i++ ) { scanf ( "%d", &m ); p = (struct node *)malloc(sizeof(struct node)); p->data = m; p->next = NULL; if(head == NULL) head = p; else q->next = p; q = p; } p = head; while(p != NULL) { printf ( p->next == NULL ? "%d\n" : "%d " , p->data ); p = p->next; } return 0;}
数据结构实验之链表二:逆序建立链表
#include<cstdio>#include<cstring>#include<cstdlib>#include <iostream>using namespace std;struct node{ int data; struct node *next;};int main(){ int i, n, m; struct node *head, *p; scanf ( "%d", &n ); head = (struct node *)malloc(sizeof(struct node)); head->next = NULL; for ( i = 1;i <= n; i++ ) { scanf ( "%d", &m ); p = (struct node *)malloc(sizeof(struct node)); p->data = m; p->next = head->next; head->next = p; } p = head->next; while(p != NULL) { printf ( p->next == NULL ? "%d\n" : "%d " , p->data ); p = p->next; } return 0;}
数据结构实验之链表三:链表的逆置
#include<cstdio>#include<cstring>#include<cstdlib>#include <iostream>using namespace std;struct node{ int data; struct node *next;};int main(){ int m; struct node *head, *p; head = (struct node *)malloc(sizeof(struct node)); head->next = NULL; while(~scanf ( "%d", &m ) && m != -1) { p = (struct node *)malloc(sizeof(struct node)); p->data = m; p->next = head->next; head->next = p; } p = head->next; while(p != NULL) { printf ( p->next == NULL ? "%d\n" : "%d " , p->data ); p = p->next; } return 0;}
数据结构实验之链表四:有序链表的归并
#include <cstdio>#include <cstring>#include <algorithm>#include <cstdlib>using namespace std;struct node{ int data; struct node *next;};struct node *create(int n){ int i; struct node *head, *tail, *p; head = (struct node*)malloc(sizeof(struct node)); head->next = NULL; tail = head; for ( i = 0;i <= n; i++ ) { p = (node *)malloc(sizeof(node)); if ( i != n ) scanf ( "%d", &p->data ); else p->data = (1 << 30 ); p->next = NULL; tail->next = p; tail = p; }// p->next->data = (1 << 30);// tail = p->next;// tail->next = NULL; return head;}struct node *sumList(node *head1, node *head2, int num){ node *p1, *p2, *p, *head, *tail; p1 = head1->next; p2 = head2->next; head = (struct node*)malloc(sizeof(struct node)); head->next = NULL; tail = head; while ( num-- ) { if (p1->data < p2->data) { p = (struct node*)malloc(sizeof(struct node)); p->data = p1->data; p->next = NULL; tail->next = p; tail = p; p1 = p1->next; } else { p = (struct node*)malloc(sizeof(struct node)); p->data = p2->data; p->next = NULL; tail->next = p; tail = p; p2 = p2->next; } } return head;}void display(struct node *sum){ node *p; p = sum->next; while ( p != NULL ) { printf ( p->next != NULL ? "%d " : "%d\n", p->data ); p = p->next; }}int main(){ int n, m; struct node *head1, *head2, *sum; scanf ( "%d %d", &n, &m ); head1 = create(n); head2 = create(m); sum = sumList(head1, head2, n+m); display(sum);}
数据结构实验之链表五:单链表的拆分
#include <cstdio>#include <cstring>#include <algorithm>#include <cstdlib>using namespace std;struct node{ int data; struct node *next;};int num1, num2;struct node *head1, *head2;struct node *create(int n){ int i; struct node *head, *tail, *p; head = (struct node*)malloc(sizeof(struct node)); head->next = NULL; tail = head; for ( i = 0;i < n; i++ ) { p = (node *)malloc(sizeof(node)); scanf ( "%d", &p->data ); p->next = NULL; tail->next = p; tail = p; } return head;}void List(node *head, int n){ node *tail1, *tail2, *p, *q; head1 = (struct node*)malloc(sizeof(struct node)); head1->next = NULL; tail1 = head1; head2 = (struct node*)malloc(sizeof(struct node)); head2->next = NULL; tail2 = head2; p = head->next; while ( n-- ) { if (p->data%2 == 0 ) { num1++; q = (struct node*)malloc(sizeof(struct node)); q->data = p->data; q->next = NULL; tail1->next = q; tail1 = q; p = p->next; } else { num2++; q = (struct node*)malloc(sizeof(struct node)); q->data = p->data; q->next = NULL; tail2->next = q; tail2 = q; p = p->next; } }}void display(){ node *p; p = head1->next; printf ( "%d %d\n", num1, num2 ); while ( p != NULL ) { printf ( p->next != NULL ? "%d " : "%d\n", p->data ); p = p->next; } p = head2->next; while ( p != NULL ) { printf ( p->next != NULL ? "%d " : "%d\n", p->data ); p = p->next; }}int main(){ int n; num1 = num2 = 0; struct node *head; scanf ( "%d", &n ); head = create(n); List(head, n); display();}
数据结构实验之链表六:有序链表的建立
#include <cstdio>#include <cstring>#include <algorithm>#include <cstdlib>using namespace std;struct node{ int data; struct node *next;};int main(){ int n, i, j; struct node *head, *tail, *p, *q; head = (struct node *)malloc(sizeof(struct node)); head->next = NULL; tail = head; scanf ( "%d", &n ); for ( i = 0;i < n; i++ ) { p = (struct node *)malloc(sizeof(struct node)); scanf ( "%d", &p->data ); p->next = NULL; tail->next = p; tail = p; } for ( p = head->next;p != NULL;p = p->next ) { for ( q = head->next;q != p;q = q->next ) { if ( p->data < q->data ) { j = p->data; p->data = q->data; q->data = j; } } } p = head->next; while( p ) { printf ( p->next != NULL ? "%d " : "%d\n" , p->data ); p = p->next; }}
数据结构实验之链表七:单链表中重复元素的删除
#include <cstdio>#include <cstring>#include <algorithm>#include <cstdlib>using namespace std;struct node{ int data; struct node *next;};int main(){ int n, i, j; struct node *head, *tail, *p, *q, *r; head = (struct node *)malloc(sizeof(struct node)); head->next = NULL; tail = head; scanf ( "%d", &n ); for ( i = 0;i < n; i++ ) { p = (struct node *)malloc(sizeof(struct node)); scanf ( "%d", &p->data ); p->next = NULL; p->next = head->next; head->next = p; } printf ( "%d\n", n ); p = head->next; while( p ) { printf ( p->next != NULL ? "%d " : "%d\n" , p->data ); p = p->next; } p = head->next; while ( p->next != NULL ) { q = p; while ( q->next != NULL ) { if (p->data == q->next->data) { r = q->next; q->next = r->next; free(r); n--; } else q = q->next; } p = p->next; } printf ( "%d\n", n ); p = head->next; while( p ) { printf ( p->next != NULL ? "%d " : "%d\n" , p->data ); p = p->next; }}
数据结构实验之链表八:Farey序列
#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;struct node{ int erator; int minator; struct node *next;};node *head = new node;void First_inti(){ node *tail; tail = head; for ( int i = 0;i < 2; i++ ) { node *p = new node; p->erator = i; p->minator = 1; tail->next = p; tail = p; }}void create(int i){ node *p, *q; p = head->next; while ( p->next ) { q = p->next; if ( p->minator+q->minator <= i ) { node *tail = new node; tail->minator = p->minator+q->minator; tail->erator = p->erator+q->erator; p->next = tail; tail->next = q; } p = p->next; }}void display(struct node *head){ int num = 0; node *p; p = head->next; while ( p ) { num++; printf ( num != 10 ? "%d/%d\t" : "%d/%d", p->erator, p->minator ); p = p->next; if ( num == 10 ) { printf ( "\n" ) ; num = 0; } }}int main(){ int n; First_inti(); scanf ( "%d", &n ); for ( int i = 2;i <= n; i++ ) { create( i ); } display( head ); return 0;}
数据结构实验之链表九:双向链表
#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;struct node{ int num; struct node *next, *pro;};int main(){ int n, m; scanf ( "%d %d", &n, &m ); node *tail, *q, *p; node *head = new node; tail = head; while ( n-- ) { p = new node; scanf ( "%d", &p->num ); p->next = NULL; p->pro = NULL; tail->next = p; p->pro = tail; tail = p; } while ( m-- ) { int h; scanf ( "%d", &h ); if ( head->next->num == h ) { printf ( "%d\n", head->next->next->num ); } else if ( tail->num == h ) { printf ( "%d\n", tail->pro->num ); } else { q = head->next; while ( q->next ) { if ( q->num == h ) { printf ( "%d %d\n", q->pro->num, q->next->num ); break; } q = q->next; } } }}
代码菜鸟,如有错误,请多包涵!!!
如有帮助记得支持我一下,谢谢!!!
0 0
- 山东理工大学 链表练习题答案
- 山东理工大学 顺序表练习题答案
- 山东理工大学 栈和队列练习题答案
- 山东理工大学ACM平台题答案关于C语言 1601 3n+1数链问题
- 山东理工大学ACM平台题答案 数列有序! 1244
- 山东理工大学ACM平台题答案 图案打印 1127
- 山东理工大学ACM平台题答案 1134 数列求和
- 山东理工大学ACM平台题答案 2561 九九乘法表
- 山东理工大学ACM平台题答案 1235 计算球体积
- 山东理工大学ACM平台题答案 1604 人见人爱A^B
- 山东理工大学ACM平台题答案 2561 九九乘法表
- 山东理工大学acm非专业程序设计基础答案
- 山东理工大学oj【2116】数据结构实验之链表一:顺序建立链表
- 山东理工大学,C++
- 山东理工大学,C++1
- 山东理工大学ACM平台题答案 C语言实验——打印数字图形 1179
- 山东理工大学ACM平台题答案 C语言实验——分割整数1175
- 山东理工大学ACM平台题答案 1178C语言实验——数组逆序
- HTML+CSS基础 img标签alt属性 当图片加载失败的时候显示为文本
- jQuery学习笔记
- backbone(3) view 的用法
- LeetCode 327. Count of Range Sum
- Android中应用TabLayout实现顶部Tab小菜单加滑动效果
- 山东理工大学 链表练习题答案
- java中<> 的用法
- HTML+CSS基础 img标签border参数变化产生的效果
- CGLib、Proxy、Aop resources
- 关于pscp的人生经验
- Python练习题
- 简单有效的养生方法
- Linux中的文件描述符与打开文件之间的关系
- Kinect v2 简介