2014秋C++第19周 项目 单链表/枚举
【项目1 - 动态链表体验】
下面是一个建立动态链表的程序。阅读程序,在草稿纸上画出链表建立的过程,借此学会如何建立链表。然后按要求改造程序。
#include <iostream>
using namespace std;
struct Node
{int data; //结点的数据struct Node *next; //指向下一结点
};
Node *head=NULL; //将链表头定义为全局变量,以便于后面操作
void make_list(); //建立链表
void out_list(); //输出链表int main( )
{make_list();out_list();return 0;
}
void make_list()
{int n;Node *p;cout<<"输入若干正数(以0或一个负数结束)建立链表:"cin>>n;while(n>0) //输入若干正数建立链表,输入非正数时,建立过程结束{p=new Node; //新建结点p->data=n; p->next=head; //新建的结点指向原先的链表头head=p; //链表头赋值为新建的节点,这样,新结点总是链表头cin>>n; //输入下一个数,准备建立下一个结点}return;
}
void out_list()
{Node *p=head;cout<<"链表中的数据为:"<<endl;while(p!=NULL){cout<<p->data<<" ";p=p->next;}cout<<endl;return;
}
在上面的程序基础上定义下面的函数,实现相应的功能。
为简便起见,每编写一个函数,立刻在main函数中调用进行测试。
(1)编写make_list2()函数建立链表,使建立链表时,后输入的数据,将新输入的数字对应的结点放在链表末尾。若输入为3 5 2 9 4 7 0,建立的链表为:
(2)编写函数void search(int x),输出链表中是否有值为x的结点。
(3)编写函数delete_first_node(),删除链表中的第一个结点。
(4)编写函数delete_node(int x),删除结点值为x的结点。
(5)编写make_list3()函数建立链表,使建立链表时,使结点中的数据呈现升序。若输入为3 5 2 9 4 7 0,建立的链表为:
(6)编写函数void insert(int x),将值为x的结点插入到由make_list3建立起来的有序链表中。
【项目2-猴子选大王】
一群猴子,编号是1,2,3 ...m,这群猴子(m个)按照1-m的顺序围坐一圈。从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。输入m和n,输出为大王的猴子是几号。
提示1:(1)链表解法:可以用一个循环的单链表来表示这一群猴子。表示结点的结构体中有两个成员:一个保存猴子的编号,一个为指向下一个人的指针,编号为m的结点再指向编号为1的结点,以此构成环形的链。当数到第n个时,该结点被删除,继续数,直到只有一个结点。(2)使用结构数组来表示循环链:结构体中设一个成员表示对应的猴子是否已经被淘汰。从第一个人未被淘汰的数起,每数到n时,将结构中的标记改为0,表示这只猴子已被淘汰。当数到数组中第m个元素后,重新从第一个数起,这样循环计数直到有m-1被淘汰。
提示2:该题为计算机科学中的经典问题,很多实际的问题可以抽象到这种模型上来。感兴趣的同学请搜索“约瑟夫问题”。
【项目3-应用枚举】
(1)阅读教材7.3节,了解枚举类型的一般用法。阅读下面输出He先生买车方案的程序,理解使用枚举类型的意义。
#include <iostream>
using namespace std;
enum Color {red,black,white};
enum Brand {lavida,tiggo,skoda};
int main( )
{int color,brand;for(color=red; color<=white; color++)for(brand=lavida; brand<=skoda; brand++)if(!((color==red&&brand==tiggo)||(color==white&&brand==skoda))){switch(color){case red:cout<<"红";break;case black:cout<<"黑";break;case white:cout<<"白";break;}switch(brand){case lavida:cout<<"Lavida"<<endl;break;case tiggo:cout<<"Tiggo"<<endl;break;case skoda:cout<<"Skoda"<<endl;break;}}return 0;
}
(2)设计函数,可以按指定的方式,输出一个平面点的对称点
下面给出枚举类型定义和main函数(测试函数),请写出output函数的实现。
#include<iostream>
using namespace std;
enum SymmetricStyle {axisx, axisy, point};//分别表示按x轴, y轴, 原点对称三种方式
void output(double,double,SymmetricStyle);
int main()
{int x,y;cout<<"输入点的坐标:";cin>>x>>y;cout<<"关于x轴的对称点是:";output(x,y,axisx);cout<<"关于y轴的对称点是:";output(x,y,axisy);cout<<"关于坐标原点的对称点是:";output(x,y,point);return 0;
}
【项目4-点和距离】
读程序,写出函数的定义,注意其中枚举类型的用法
enum SymmetricStyle {axisx,axisy,point};//分别表示按x轴, y轴, 原点对称
struct Point{double x; // 横坐标double y; // 纵坐标
};
double distance(Point p1, Point p2); // 两点之间的距离
double distance0(Point p1);
Point symmetricAxis(Point p,SymmetricStyle style); //返回对称点
int main( ){Point p1={1,5},p2={4,1},p;cout<<"两点的距离为:"<<distance(p1,p2)<<endl;cout<<"p1到原点的距离为:"<<distance0(p1)<<endl;p=symmetricAxis(p1,axisx);cout<<"p1关于x轴的对称点为:"<<"("<<p.x<<", "<<p.y<<")"<<endl;p=symmetricAxis(p1,axisy);cout<<"p1关于y轴的对称点为:"<<"("<<p.x<<", "<<p.y<<")"<<endl;p=symmetricAxis(p1,point);cout<<"p1关于原点的对称点为:"<<"("<<p.x<<", "<<p.y<<")"<<endl;return 0;
}
// 求两点之间的距离
double distance(Point p1,Point p2)
{ double d; …… return d;
} // 求点到原点的距离
double distance0(Point p)
{ double d; …… return d;
} // 求对称点
Point symmetricAxis(Point p1,SymmetricStyle style)
{ Point p; ……return p;
}
【项目5-读懂“共同体”】
运行下面的程序,并解释运行结果。
#include <iostream>
using namespace std;
union un
{int i;char c[4];
};
int main()
{union un x;x.c[0]='A';x.c[1]='B';x.c[2]='C';x.c[3]='D';cout<<x.i<<endl;return 0;
}
=================== 迂者 贺利坚 CSDN博客专栏================= |== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==| |== C++ 课堂在线专栏 贺利坚课程教学链接(分课程年级) ==| |== 我写的书——《逆袭大学——传给IT学子的正能量》 ==| ===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 ===== |
2014秋C++第19周 项目 单链表/枚举相关推荐
- 2014秋C++ 第8周项目 分支程序设计
课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课 ...
- 2014秋C++第8周项目5参考-定期存款利息计算器
课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,实践要求见http://blog.csdn.net/sxhelijian/a ...
- 2014秋C++第14周OJ题目参考
课程主页在 http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在 云学堂"贺老师课堂"同步展示,使用的帐号请 ...
- 第3周实践项目5 -顺序表的应用 拆分单链表
/* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称: 拆分单链表 叙述: 拆分单链表,有一个带头节点的单链表L={a1, ...
- 第7周项目实践2.1 用只有尾节点指针rear的循环单链表实现队列算法库
//用只有尾节点指针rear的循环单链表作为队列存储结构,其中每个节点的类型为LinkNode,rear指针用于唯一标识链队 typedef struct LinkNode {int date;Lin ...
- 第4周实践项目1 建立单链表(非多组织结构)
#include <stdio.h> #include <malloc.h> typedef int ElemType; typedef struct LNode //定义单链 ...
- 陀螺问答TOP 10 周榜单(9.23-9.29):币圈暴跌是否与谷歌量子霸权有关?
近日,陀螺财经App推出了全新功能"陀螺问答",为用户首创向KOL单独提问的机会,一对一问答,满足用户个性化深度交互的需求. 截止目前,"陀螺问答"已接收到70 ...
- C语言单链表实现FCFS算法,2014腾讯实习笔试题
2014腾讯实习笔试题 1. 关于二叉树,下面说法正确的是() A. 对于N个节点的二叉树,其高度为nlog2n; B. 一个具有1025个节点的二叉树,其高度范围在11~1025之间 C. 二叉树的 ...
- 第十周 项目一(4)哈夫曼编码的算法验证
/* Copyright (c)2017,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第十一周项目1 - 哈夫曼编码算法验证.cpp 作 者:孙仁圆 完成日期:2 ...
最新文章
- Maven项目Spring Boot启动
- 【转】Android -- Looper.prepare()和Looper.loop()
- 禁用/启用本地连接的dos命令是什么啊?
- 批量ping脚本shell_30个Linux Shell脚本经典案例(上)
- TortoiseGit上传项目到GitHub
- 01-Flutter移动电商实战-项目学习记录
- 屏蔽tomcat服务器报错信息,tomcat 屏蔽网络爬虫
- java 是否继续_Java异常被抛出或被捕获之后,代码是否继续执行的问题
- linux怎么重载mysql配置命令_在Linux系统中启动/停止/重新启动/启用/重新加载MySQL和MariaDB服务...
- 国税计算机安全管理制度,武汉市国家税务局关于印发《计算机中心机房管理制度》的通知...
- 詹姆斯高斯林_詹姆斯·高斯林接下来要做什么?
- 软体机器人空间感知技术综述
- 页面加载缓冲的login
- openssl源代码方式安装以及简单的实验
- J2EE基础之自定义标签2
- 微博的传播特性在媒体营销中的优势
- 强大的 Vim 主题配色方案 下载安装方法
- matlab 不知道函数形式 函数拟合,请问三元函数的拟合,在不知道函数形式的情况下,如何用1stopt实现...
- 【linux】linux 搭建pppoe服务器
- 清理软件无法清理android文件,手机冗余文件清理工具,安卓冗余文件怎么清理-
热门文章
- 转行经验分享,关于软件测试的感悟,你想知道的都在这里……
- 在PyCharm环境下使用Jupyter Notebook
- 基于预训练深度学习算法的番茄作物病害分类
- android查看应用权限管理,通过adb列出Android应用程序的权限
- java jdk运行_java运行机制、Jdk版本及Java环境变量
- java cookie共享_cookie共享
- django批量修改table_python中Django视图(view)的详解(附示例)
- 动手学深度学习Pytorch Task07
- 文本摘要生成 - 基于注意力的序列到序列模型
- 全球AI挑战-场景分类的比赛源码(多模型融合)