| 
 
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>  
 
 
 | 
 |