基于visual Studio2013解决C语言竞赛题之1049抓牌排序
题目
解决代码及点评
/*
功能:插入排序。许多玩牌的人是以这样的方式来对他们手中的牌进行排序的:
设手中原有3张牌已排好序,抓1张新牌,若这张新牌的次序在原来的第2张牌之后,第
3张牌之前,那么就把这张新牌放在第3张牌的位置上,原来的第3张改为第4张,
然后再抓新牌。按着这个算法,编写一个排序程序。
注:开始一张牌也没有,从第一张牌开始抓起。 时间:23:34 2013/10/24
*/ #include<stdio.h>
#include<stdlib.h> struct card
{
int num;
struct card *pNext;
}; typedef struct card CARD; CARD *initList(int); //链表初始化声明,第一张牌
void insertList(CARD *p,int n); //在第i个元素后插入
void showAll(CARD *p); void main()
{
CARD *pHead=initList(2); //头结点创建,next=Null insertList(pHead,4);
insertList(pHead,3);
insertList(pHead,1);
showAll(pHead);
system("pause");
} void showAll(CARD *p)
{
do
{
printf("%d \n",p->num);
} while((p->pNext!=NULL) && (p=p->pNext));
} void insertList(CARD *p,int n)
{
CARD *pNew=(CARD *)malloc(sizeof(CARD)); //分配新结点
if(pNew==NULL)return;
if(n<p->num) //判断n是否小于头结点 如果小于,将头结点的值与n交换
{
int temp=p->num;
p->num=n;
n=temp;
}
CARD *Prior=p; //用来保存前结点
while(n>p->num && p->pNext!=NULL) //当n大于当前结点时,指针向后移,知道小于当前结点或next为NULL时终止
{
Prior=p; //循环结束后,为当前结点的前结点
p=p->pNext;
}
if(n<p->num) //当n<小于当前结点,则在当前结点前插入n
{
Prior->pNext=pNew;
pNew->pNext=p;
pNew->num=n;
}
if(p->pNext==NULL && n>p->num) //假设牌码最大,则在链表尾部插入
{
p->pNext=pNew;
pNew->pNext=NULL;
pNew->num=n;
} }
CARD *initList(int n)
{
CARD *p=(CARD *)malloc(sizeof(CARD));
if(p==NULL)return NULL; //分配失败返回空
p->num=n;
p->pNext=NULL;
return p;
}
代码编译以及运行
由于资源上传太多,资源频道经常被锁定无法上传资源,同学们可以打开VS2013自己创建工程,步骤如下:
1)新建工程
2)选择工程
3)创建完工程如下图:
4)增加文件,右键点击项目
5)在弹出菜单里做以下选择
6)添加文件
7)拷贝代码与运行
程序运行结果
代码下载
http://download.csdn.net/detail/yincheng01/6681845
解压密码:c.itcast.cn
基于visual Studio2013解决C语言竞赛题之1049抓牌排序的更多相关文章
- 基于visual Studio2013解决C语言竞赛题之1054抽牌游戏
题目 解决代码及点评 /************************************************************************/ /* 54 ...
- 基于visual Studio2013解决C语言竞赛题之1053洗牌
题目 解决代码及点评 /* 功能:洗扑克牌.将54张牌分别编号为1,2,-,54号,并放在数组M中. 洗牌方法如下:产生[1,54]区间内的一个随机数K,将M[1]与M[K]交换: ...
- 基于visual Studio2013解决C语言竞赛题之1065二维排序
题目 解决代码及点评 /* 功能:二维数组排序.设有4×5的数组M,通过排序使 M[1][1]≤M[1][2]≤...≤M[1][5]≤M[2][1]≤M[2][2]≤...≤ ...
- 基于visual Studio2013解决C语言竞赛题之1067间隔排序
题目 解决代码及点评 /* 功能:间隔元素排序.用随机函数产生25个[25,75]之间的整数, 把它送到一维数组M中. 要求对M[I],M[I+J],M[I+2*J],-这些元 ...
- 基于visual Studio2013解决C语言竞赛题之0401阶乘
题目 解决代码及点评 这个是一道经典的教科书题目,基本上每本基础的c/c++语言教科书都会有这个题目 用来演示循环语句 #include <stdio.h> #include ...
- 基于visual Studio2013解决C语言竞赛题之0205位数求和
题目
- 基于visual Studio2013解决C语言竞赛题之0201温度转换
题目 解决代码及点评 #include <stdio.h> #include <stdlib.h> void main() { float f; float c; float ...
- 基于visual Studio2013解决C语言竞赛题之0409 100以内素数
题目 解决代码及点评 在已经知道素数是怎么判断的基础上,增加循环,可以判断出100以内的素数 /******************************************* ...
- 基于visual Studio2013解决C语言竞赛题之0408素数
题目 解决代码及点评 判断一个数是不是素数的方法,一般是看n是不是能被n以内的某个整数(1除外)整除 为了提高效率,这个整数范围一般缩小到n的平方根 如果在这个范围内的整数都不能整除,那么 ...
随机推荐
- linux中grep的用法
http://www.9usb.net/200902/linux-grep.html http://blog.51yip.com/linux/1008.html http://blog.csdn.ne ...
- Tour(KM算法)
Tour Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total Submi ...
- LeetCode——Length of Last Word
Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the l ...
- load、save方法、spark sql的几种数据源
load.save方法的用法 DataFrame usersDF = sqlContext.read().load("hdfs://spark1:9000/users.pa ...
- 写一方法计算实现任意个整数之和.在主调函数中调用该函数,实现任意个数之和。(使用params参数)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- svn笔记
安装部署 1.yum install subversion 2.创建svn版本库目录 mkdir -p /svn 3.创建版本库 svnadmin create /svn/fengchao/ ...
- 关于VerilogHDL生成的锁存器
总是会遇到有写文档中提到,不要生成锁存器.问题是 一: 什么叫锁存器 二 : 为什么不要生成锁存器 三 : 如何避免生成锁存器 好,现在就这三个问题,一一做出解答 一 什么叫锁存器 锁存器(Latc ...
- 基于visual Studio2013解决算法导论之017查找第n小元素
题目 查找第n小元素 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> ...
- 【原创】Android 系统稳定性 - ANR(二)
文章都为原创,转载请注明出处,未经允许而盗用者追究法律责任. 很久之前写的了,留着有点浪费,共享之.编写者:李文栋P.S. OpenOffice粘贴过来后格式有些混乱. 1.2 如何分析ANR问题 引 ...
- Android学习笔记之View(一):LayoutInflater
使用LayoutInflater加载布局的两种方式: 第一种: LayoutInflater inflater=LayoutInflater.from(context); inflater.infla ...