基于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=NullinsertList(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
轉載于:https://www.cnblogs.com/new0801/p/6177435.html
總結
以上是生活随笔為你收集整理的基于visual Studio2013解决C语言竞赛题之1049抓牌排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 替换Quartus 自带编辑器 (转CO
- 下一篇: 阿里巴巴多少钱一股啊?