久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2670|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

C語言動態(tài)順序表源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:170498 發(fā)表于 2019-4-1 17:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
最近在學(xué)習(xí)stm32的時候發(fā)現(xiàn)自己的c語言基礎(chǔ)還停留在c51的水平,因此做一些練習(xí)提高自己的c語言水平。
我參考了 《妙趣橫生的算法-c語言實現(xiàn)》這本書,建議大家從書 店入手

  1. #include <stdio.h>

  2. #include <mallco.h>              // 使用malloc函數(shù)要包含這個文件
  3. #include <assert.h>


  4. #define INIT_CAPACITY 10  // 初始化時分配的容量


  5. typedef struct seqlist{
  6.     int *array;        // 存儲空間的基地址
  7.     int size;          // 有效元素個數(shù)
  8.     int capacity;      // 當(dāng)前分配的存儲容量
  9. }SEQLIST;


  10. void seqlist_init(SEQLIST *list);          //初始化順序表
  11. void check_capacity(SEQLIST *list);        // 檢查是否滿

  12. void push_front(SEQLIST *list, int value);  // 在順序表前頭部插入元素
  13. void push_back(SEQLIST *list, int value);   // 在順序表尾部插入元素
  14. void insert_list(SEQLIST *list, int pos, int value);        // 在pos這個位置插入元素

  15. void pop_front(SEQLIST *list);              // 刪除順序表第一個元素
  16. void pop_back(SEQLIST *list);               // 刪除順序表最后一個元素

  17. void list_printf(SEQLIST *list);            // 遍歷順序表
  18. void destroy_list(SEQLIST *list);           // 摧毀順序表
  19. void list_cleardata(SEQLIST *list);         // 清空順序表的數(shù)據(jù)


  20. int main(void)
  21. {
  22.     SEQLIST list;
  23.    
  24.     seqlist_init(&list);
  25.     push_front(&list, 3);
  26.     push_front(&list, 2);
  27.     push_front(&list, 1);
  28. //    list_printf(&list);
  29.    
  30.     push_back(&list, 3);
  31.     push_back(&list, 2);
  32.     push_back(&list, 1);
  33.     pop_back(&list);
  34.     pop_front(&list);
  35.     insert_list(&list, 3, 4);
  36.     list_printf(&list);
  37.    
  38.     return 0;
  39. }


  40. // 初始化順序表

  41. void seqlist_init(SEQLIST *list)
  42. {
  43.     assert(list);   // 斷言:判斷l(xiāng)ist是否為空
  44.    
  45.     list->array = (int *)malloc(INIT_CAPACITY * sizeof(int)); // 分配一斷內(nèi)存,容量為 INIT_CAPACITY個int的大小
  46.     assert(list->array);               // 斷言:判斷aray是否為空
  47.     list->size = 0;                    // 沒有賦值之前有效元素個數(shù)為0
  48.     list->capacity = INIT_CAPACITY;    // 容量
  49. }


  50. // 判斷順序表是否以滿,如果滿了,增加順序表的容量

  51. void check_capacity(SEQLIST *list)
  52. {
  53.     assert(list);    // 判斷傳入的指針是否為空
  54.    
  55.     if (list->size == list->capacity)
  56.     {
  57.          // 重新分配一塊內(nèi)存,但是之前的數(shù)據(jù)不變
  58.         list->array = (int *)realloc(list->array, (2 * list->capacity * sizeof(int)));
  59.         assert(list);            // 判斷是否分配成功
  60.         list->capacity *= 2;     // 容量翻倍
  61.     }
  62. }


  63. // 在順序表前插入數(shù)據(jù)   
  64. void push_front(SEQLIST *list, int value)
  65. {
  66.     int i;
  67.    
  68.     assert(list);            // 判斷傳入的是否為空
  69.     check_capacity(list);    // 在執(zhí)行插入之前先判斷順序表是否以滿,如果滿了,增加順序表的容量
  70.    
  71.     // 將所有元素向后移動一位
  72.     for(i=list->size; i>=0; i--)
  73.     {
  74.         list->array[i] = list->array[i-1];
  75.     }
  76.     list->array[0] = value;  // 將插入的值賦給第一個元素
  77.     list->size++;            // 有效元素個數(shù) +1   
  78. }


  79. // 在順序表尾部插入數(shù)據(jù)   
  80. void push_back(SEQLIST *list, int value)
  81. {
  82.     assert(list);    // 判斷傳入的是否為空
  83.    
  84.     check_capacity(list);  // 在執(zhí)行插入之前先判斷順序表是否以滿,如果滿了,增加順序表的容量
  85.    
  86.     list->array[list->size] = value; // size記錄了當(dāng)前有效元素的個數(shù),而數(shù)組從0開始,array[list->size]處在順序表最后一個元素的位置+1
  87.     list->size++;           // 插入后,有效元素個數(shù)+1
  88. }


  89. // 在順序表第pos個位置插入數(shù)據(jù)   
  90. void insert_list(SEQLIST *list, int pos, int value)
  91. {
  92.     int i;
  93.    
  94.     assert(list);  // 判斷傳入的指針是否為空
  95.     if (pos > list->size+1 && pos < 0)
  96.     {
  97.         printf("非法操作!!\n");
  98.         return;   
  99.     }
  100.    

  101.     // 將第pos個位置之后的數(shù)據(jù)往后移動一位
  102.     for (i=list->size; i>=pos; i--)
  103.     {
  104.         list->array[i] = list->array[i-1];   
  105.     }
  106.    
  107.     list->array[pos-1] = value;
  108.     list->size++;
  109. }


  110. // 刪除頭部數(shù)據(jù)
  111. void pop_front(SEQLIST *list)
  112. {
  113.     int i = 0;
  114.    
  115.     assert(list);    // 判斷傳入的是否為空
  116.    
  117.     if (list->size == 1)
  118.     {
  119.         list->size = 0;
  120.     }
  121.     else
  122.     {
  123.         for (i=0; i<list->size; i++)
  124.         {
  125.             // 將后面的賦值給前面的,第0個元素的數(shù)據(jù)就不管了(第0個數(shù)據(jù)被覆蓋)
  126.             // 第1個元素的數(shù)據(jù)給第0個數(shù)據(jù)  第2個元素的數(shù)據(jù)給第1個數(shù)據(jù) ...
  127.             list->array[i] = list->array[i+1];  
  128.         }
  129.     }
  130.     list->size--; // 有效數(shù)據(jù)的個數(shù)減1
  131. }

  132. // 尾部插入
  133. void pop_back(SEQLIST *list)
  134. {
  135.     assert(list);
  136.    
  137.     if (list->size == 0)
  138.     {
  139.         return;   
  140.     }
  141.     else
  142.     {
  143.         list->size--;
  144.     }
  145. }

  146. // 遍歷數(shù)組,并打印

  147. void list_printf(SEQLIST *list)
  148. {
  149.     int i;
  150.    
  151.     for (i=0; i<list->size; i++)
  152.     {
  153.         printf("%d  \n", list->array[i]);
  154.     }
  155. }
  156.   // 摧毀順序表
  157. void destroy_list(SEQLIST *list)
  158. {
  159.     free(list->array);
  160.    
  161.     list->size = 0;
  162.     list->capacity = 0;
  163. }

  164. // 清空順序表的數(shù)據(jù)
  165. void list_cleardata(SEQLIST *list)
  166. {
  167.     list->size = 0;
  168. }
復(fù)制代碼




評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:430197 發(fā)表于 2019-4-2 12:13 | 只看該作者
厲害厲害,有點(diǎn)意思
回復(fù)

使用道具 舉報

板凳
ID:33544 發(fā)表于 2019-8-29 11:04 | 只看該作者
厲害厲害,有點(diǎn)意思
回復(fù)

使用道具 舉報

地板
ID:68189 發(fā)表于 2019-8-30 16:24 | 只看該作者
提高一下自己 ,學(xué)習(xí)前輩的經(jīng)驗.謝謝.
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美综合一区 | 欧美高清视频 | 国产精品海角社区在线观看 | 日韩手机在线看片 | 午夜影院在线观看视频 | 一级看片免费视频囗交动图 | 一区二区三区av | 久久国产欧美日韩精品 | 久久国产香蕉 | 在线一区观看 | 91资源在线 | 亚洲一区三区在线观看 | 自拍视频在线观看 | 毛片免费在线 | 亚洲 欧美 另类 综合 偷拍 | 91高清视频| 免费精品视频在线观看 | 欧美一级二级在线观看 | 国产一区不卡 | 在线中文字幕视频 | 人人爽人人草 | 一区二区三区在线观看视频 | 91传媒在线观看 | 国产日韩精品视频 | 日韩在线h | 国产一区二区在线播放 | 亚洲国产成人av好男人在线观看 | 91亚洲一区 | 国产不卡一区 | 成人免费观看男女羞羞视频 | 欧美乱淫视频 | 波多野结衣一二三区 | 午夜看电影在线观看 | www.五月天婷婷 | 男人的天堂中文字幕 | 日本成人在线网址 | 精品人伦一区二区三区蜜桃网站 | 中国一级特黄真人毛片免费观看 | 日韩中字幕 | 亚洲国产成人精品一区二区 | 久久精品视频在线观看 |