基于visual Studio2013解决C语言竞赛题之1049抓牌排序

时间:2023-03-10 02:25:59
基于visual Studio2013解决C语言竞赛题之1049抓牌排序


基于visual Studio2013解决C语言竞赛题之1049抓牌排序

题目

基于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)新建工程

基于visual Studio2013解决C语言竞赛题之1049抓牌排序

2)选择工程

基于visual Studio2013解决C语言竞赛题之1049抓牌排序

3)创建完工程如下图:

基于visual Studio2013解决C语言竞赛题之1049抓牌排序

4)增加文件,右键点击项目

基于visual Studio2013解决C语言竞赛题之1049抓牌排序

5)在弹出菜单里做以下选择

基于visual Studio2013解决C语言竞赛题之1049抓牌排序

6)添加文件

基于visual Studio2013解决C语言竞赛题之1049抓牌排序

7)拷贝代码与运行

基于visual Studio2013解决C语言竞赛题之1049抓牌排序

程序运行结果

基于visual Studio2013解决C语言竞赛题之1049抓牌排序

代码下载

http://download.****.net/detail/yincheng01/6681845

解压密码:c.itcast.cn