课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。

【项目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周 项目 单链表/枚举相关推荐

  1. 2014秋C++ 第8周项目 分支程序设计

    课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课 ...

  2. 2014秋C++第8周项目5参考-定期存款利息计算器

    课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,实践要求见http://blog.csdn.net/sxhelijian/a ...

  3. 2014秋C++第14周OJ题目参考

    课程主页在 http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在 云学堂"贺老师课堂"同步展示,使用的帐号请 ...

  4. 第3周实践项目5 -顺序表的应用 拆分单链表

    /* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称: 拆分单链表 叙述: 拆分单链表,有一个带头节点的单链表L={a1, ...

  5. 第7周项目实践2.1 用只有尾节点指针rear的循环单链表实现队列算法库

    //用只有尾节点指针rear的循环单链表作为队列存储结构,其中每个节点的类型为LinkNode,rear指针用于唯一标识链队 typedef struct LinkNode {int date;Lin ...

  6. 第4周实践项目1 建立单链表(非多组织结构)

    #include <stdio.h> #include <malloc.h> typedef int ElemType; typedef struct LNode //定义单链 ...

  7. 陀螺问答TOP 10 周榜单(9.23-9.29):币圈暴跌是否与谷歌量子霸权有关?

    近日,陀螺财经App推出了全新功能"陀螺问答",为用户首创向KOL单独提问的机会,一对一问答,满足用户个性化深度交互的需求. 截止目前,"陀螺问答"已接收到70 ...

  8. C语言单链表实现FCFS算法,2014腾讯实习笔试题

    2014腾讯实习笔试题 1. 关于二叉树,下面说法正确的是() A. 对于N个节点的二叉树,其高度为nlog2n; B. 一个具有1025个节点的二叉树,其高度范围在11~1025之间 C. 二叉树的 ...

  9. 第十周 项目一(4)哈夫曼编码的算法验证

    /* Copyright (c)2017,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第十一周项目1 - 哈夫曼编码算法验证.cpp 作 者:孙仁圆 完成日期:2 ...

最新文章

  1. Maven项目Spring Boot启动
  2. 【转】Android -- Looper.prepare()和Looper.loop()
  3. 禁用/启用本地连接的dos命令是什么啊?
  4. 批量ping脚本shell_30个Linux Shell脚本经典案例(上)
  5. TortoiseGit上传项目到GitHub
  6. 01-Flutter移动电商实战-项目学习记录
  7. 屏蔽tomcat服务器报错信息,tomcat 屏蔽网络爬虫
  8. java 是否继续_Java异常被抛出或被捕获之后,代码是否继续执行的问题
  9. linux怎么重载mysql配置命令_在Linux系统中启动/停止/重新启动/启用/重新加载MySQL和MariaDB服务...
  10. 国税计算机安全管理制度,武汉市国家税务局关于印发《计算机中心机房管理制度》的通知...
  11. 詹姆斯高斯林_詹姆斯·高斯林接下来要做什么?
  12. 软体机器人空间感知技术综述
  13. 页面加载缓冲的login
  14. openssl源代码方式安装以及简单的实验
  15. J2EE基础之自定义标签2
  16. 微博的传播特性在媒体营销中的优势
  17. 强大的 Vim 主题配色方案 下载安装方法
  18. matlab 不知道函数形式 函数拟合,请问三元函数的拟合,在不知道函数形式的情况下,如何用1stopt实现...
  19. 【linux】linux 搭建pppoe服务器
  20. 清理软件无法清理android文件,手机冗余文件清理工具,安卓冗余文件怎么清理-

热门文章

  1. 转行经验分享,关于软件测试的感悟,你想知道的都在这里……
  2. 在PyCharm环境下使用Jupyter Notebook
  3. 基于预训练深度学习算法的番茄作物病害分类
  4. android查看应用权限管理,通过adb列出Android应用程序的权限
  5. java jdk运行_java运行机制、Jdk版本及Java环境变量
  6. java cookie共享_cookie共享
  7. django批量修改table_python中Django视图(view)的详解(附示例)
  8. 动手学深度学习Pytorch Task07
  9. 文本摘要生成 - 基于注意力的序列到序列模型
  10. 全球AI挑战-场景分类的比赛源码(多模型融合)