TA的每日心情 | 开心 2014-6-18 08:29 |
---|
签到天数: 14 天 [LV.3]偶尔看看II
滴水大师
 
- 积分
- 2345
|
题目
解决代码及点评
- <pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"></pre><pre class="cpp" name="code" code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179"><pre class="cpp" name="code" code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179"><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"></pre><pre code_snippet_id="91880" snippet_file_name="blog_20131209_3_2921156" class="cpp" name="code">/*
- 功能:插入排序。许多玩牌的人是以这样的方式来对他们手中的牌进行排序的:
- 设手中原有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;
- }</pre><br><br></pre></pre></pre>
|
|