最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言中數(shù)據(jù)結(jié)構(gòu)之鏈?zhǔn)交鶖?shù)排序

 更新時間:2017年09月14日 08:45:50   作者:Vit_rose  
這篇文章主要介紹了C語言中數(shù)據(jù)結(jié)構(gòu)之鏈?zhǔn)交鶖?shù)排序的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下

C語言中數(shù)據(jù)結(jié)構(gòu)之鏈?zhǔn)交鶖?shù)排序

實現(xiàn)效果圖:

實例代碼:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1

typedef int Status;
typedef int ElemType;

#define MAX_NUM_OF_KEY 8 //關(guān)鍵字項數(shù)最大值
#define RADIX 10 //關(guān)鍵字基數(shù),此時是十進制整數(shù)的基數(shù)
#define MAX_SPACE 100 //書上為10000
#define ord(ch) ((ch)-'0')
#define succ(x) ((x)+1)
typedef char KeyType;
typedef struct
{
  KeyType keys[MAX_NUM_OF_KEY]; //關(guān)鍵字
  int next;
}SLCell;  //靜態(tài)鏈表的結(jié)點類型

typedef struct
{
  SLCell r[MAX_SPACE]; //靜態(tài)鏈表的可利用空間,r[0]為頭結(jié)點
  int keynum; //記錄當(dāng)前關(guān)鍵字個數(shù)
  int recnum; //靜態(tài)鏈表的當(dāng)前長度
}SLList;  //靜態(tài)鏈表類型
typedef int ArrType[RADIX]; //指針數(shù)組類型

/*******************************聲明部分****************************************/



/*******************************函數(shù)部分****************************************/
void Distribute(SLCell r[],int i,ArrType f,ArrType e)
{
  int j,p;

  for(j = 0;j<RADIX;++j){
    f[j] = 0;
    e[j] = 0;
  }

  for(p = r[0].next; p ;p = r[p].next){
    j = ord(r[p].keys[i]);
    if(!f[j])
      f[j] = p;
    else
      r[e[j]].next = p;
    e[j] = p;
  }
}

void Collect(SLCell r[],int i,ArrType f,ArrType e)
{
  int j,t;

  for(j = 0; j<RADIX&&!f[j] ; j = succ(j)); //找到第一個非空子表,succ為求后繼函數(shù)
  if(j<RADIX){
    r[0].next = f[j];
    t = e[j];
    while(j<RADIX){
      for(j = succ(j) ; j<RADIX-1 && !f[j]; j = succ(j));
        if(f[j] && j<=RADIX-1){
          r[t].next = f[j];
          t = e[j];
        }
    }
    r[t].next = 0;
  }

}

void RadixSort(SLList *L)
{
  int i;
  ArrType f,e;

  for(i = 0;i<L->keynum;i++){
    Distribute(L->r,i,f,e);
    Collect(L->r,i,f,e);
  }
}

void CreateSLL(SLList *L)
{
  char s[100];
  int i,n,ct;
  L->recnum = 0;

 /*  printf("請輸入關(guān)鍵字個數(shù):\n");
  scanf("%d",&L->keynum);
  printf("請輸入鏈表長度:\n");
  scanf("%d",&n);*/
  L->keynum = 3;
  n = 10;
  printf("依次輸入:278 109 063 963 589 184 505 269 008 083 \n");
  for(ct = 0;ct<n;ct++){
  //  printf("請輸入關(guān)鍵字:\n");

    scanf("%s",&s);
    L->recnum++;
    for(i = 0;i<L->keynum;++i)
      L->r[L->recnum].keys[L->keynum-1-i] = s[i];
  }
  for(i = 0;i<L->recnum;++i)
    L->r[i].next = i+1;
  L->r[L->recnum].next = 0;
}

void TraverseSLL(SLList L)
{
  int i,j;
  for(i = L.r[0].next; i ;i = L.r[i].next){
    for(j = L.keynum-1;j>=0;j--)
      printf("%c",L.r[i].keys[j]);
    printf(" ");
  }
  printf("\n");
}
/*******************************主函數(shù)部分**************************************/
int main()
{
  SLList L;
  printf("創(chuàng)建靜態(tài)鏈表\n");
  CreateSLL(&L);
  printf("創(chuàng)建完成:\n");
  TraverseSLL(L);

  printf("\n基數(shù)排序:\n");
  RadixSort(&L);
  TraverseSLL(L);
  return 0;
}

如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • 一文讀懂C++中指針和內(nèi)存分配

    一文讀懂C++中指針和內(nèi)存分配

    我們知道聲明的所有變量在內(nèi)存中都有一個特定的地址。聲明一個指針變量來指向內(nèi)存中的這些地址,這篇文章主要介紹了C++中指針和內(nèi)存分配,需要的朋友參考下吧
    2021-06-06
  • C++ Primer中&、*符號的多重定義與int *p和int* p的區(qū)別講解

    C++ Primer中&、*符號的多重定義與int *p和int* p的區(qū)別講解

    今天小編就為大家分享一篇關(guān)于C++Primer中&、*符號的多重定義與int *p和int* p的區(qū)別講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • C++實現(xiàn)自定義撤銷重做功能的示例代碼

    C++實現(xiàn)自定義撤銷重做功能的示例代碼

    在使用c++做界面開發(fā)的時候,尤其是實現(xiàn)白板功能時需要自己實現(xiàn)一套撤銷重做功能.如果是qt則有QUndoable對象,可以直接拿來用。但是如果是使用gdi繪圖,則可能需要自己實現(xiàn)了。本文就來用C++實現(xiàn)自定義撤銷重做功能,需要的可以參考一下
    2022-12-12
  • Qt利用QNetwork實現(xiàn)上傳數(shù)據(jù)的示例代碼

    Qt利用QNetwork實現(xiàn)上傳數(shù)據(jù)的示例代碼

    這篇文章主要為大家詳細介紹了Qt如何利用QNetwork實現(xiàn)上傳數(shù)據(jù)的 功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-02-02
  • C語言實現(xiàn)簡單計算器程序

    C語言實現(xiàn)簡單計算器程序

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單計算器程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C語言編寫Linux守護進程實例

    C語言編寫Linux守護進程實例

    這篇文章主要介紹了C語言編寫Linux守護進程實例,本文講解了守護進程及其特性、守護進程的編程要點、守護進程代碼實例等內(nèi)容,需要的朋友可以參考下
    2015-02-02
  • C++實現(xiàn)LeetCode(105.由先序和中序遍歷建立二叉樹)

    C++實現(xiàn)LeetCode(105.由先序和中序遍歷建立二叉樹)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(105.由先序和中序遍歷建立二叉樹),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 最新評論

    布拖县| 裕民县| 万载县| 古浪县| 白山市| 绩溪县| 临城县| 阜宁县| 宿州市| 永善县| 临夏市| 兴海县| 共和县| 东宁县| 九龙坡区| 田东县| 瑞丽市| 东丰县| 湘潭县| 扎鲁特旗| 屯留县| 乌拉特中旗| 北辰区| 明光市| 嵊泗县| 尤溪县| 河津市| 九龙城区| 白水县| 凌云县| 介休市| 观塘区| 东方市| 昂仁县| 乌兰浩特市| 崇明县| 滦平县| 林芝县| 微山县| 衡阳县| 南宫市|