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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2695|回復: 3
打印 上一主題 下一主題
收起左側

C語言動態順序表源程序

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

  1. #include <stdio.h>

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


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


  5. typedef struct seqlist{
  6.     int *array;        // 存儲空間的基地址
  7.     int size;          // 有效元素個數
  8.     int capacity;      // 當前分配的存儲容量
  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);         // 清空順序表的數據


  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);   // 斷言:判斷list是否為空
  44.    
  45.     list->array = (int *)malloc(INIT_CAPACITY * sizeof(int)); // 分配一斷內存,容量為 INIT_CAPACITY個int的大小
  46.     assert(list->array);               // 斷言:判斷aray是否為空
  47.     list->size = 0;                    // 沒有賦值之前有效元素個數為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.          // 重新分配一塊內存,但是之前的數據不變
  58.         list->array = (int *)realloc(list->array, (2 * list->capacity * sizeof(int)));
  59.         assert(list);            // 判斷是否分配成功
  60.         list->capacity *= 2;     // 容量翻倍
  61.     }
  62. }


  63. // 在順序表前插入數據   
  64. void push_front(SEQLIST *list, int value)
  65. {
  66.     int i;
  67.    
  68.     assert(list);            // 判斷傳入的是否為空
  69.     check_capacity(list);    // 在執行插入之前先判斷順序表是否以滿,如果滿了,增加順序表的容量
  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++;            // 有效元素個數 +1   
  78. }


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


  89. // 在順序表第pos個位置插入數據   
  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個位置之后的數據往后移動一位
  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. // 刪除頭部數據
  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個元素的數據就不管了(第0個數據被覆蓋)
  126.             // 第1個元素的數據給第0個數據  第2個元素的數據給第1個數據 ...
  127.             list->array[i] = list->array[i+1];  
  128.         }
  129.     }
  130.     list->size--; // 有效數據的個數減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. // 遍歷數組,并打印

  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. // 清空順序表的數據
  165. void list_cleardata(SEQLIST *list)
  166. {
  167.     list->size = 0;
  168. }
復制代碼




評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:430197 發表于 2019-4-2 12:13 | 只看該作者
厲害厲害,有點意思
回復

使用道具 舉報

板凳
ID:33544 發表于 2019-8-29 11:04 | 只看該作者
厲害厲害,有點意思
回復

使用道具 舉報

地板
ID:68189 發表于 2019-8-30 16:24 | 只看該作者
提高一下自己 ,學習前輩的經驗.謝謝.
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产视频一二三区 | 国产伊人精品 | 午夜影院在线观看免费 | 全免费a级毛片免费看视频免 | www.欧美视频 | 美女久久久 | 欧美一级大片 | 免费观看一级特黄欧美大片 | 在线观看国产www | 国产色爽 | 亚洲精品99999| 亚洲欧美在线一区 | 国产精品高潮呻吟久久av野狼 | 成人精品免费视频 | 天天干天天操天天爽 | 成人小视频在线 | 狠狠操电影 | 草草影院ccyy | 激情毛片 | 狼色网| 久久久区 | 亚洲在线免费 | 午夜不卡一区二区 | 人人干视频在线 | 色综合一区二区三区 | 最新伦理片 | 中文字幕精品一区久久久久 | 天天操操操操操 | 乱一性一乱一交一视频a∨ 色爱av | 亚洲一区视频在线播放 | 一区二区三区精品视频 | 中文在线一区二区 | av毛片| 91精品国产欧美一区二区 | 久久av在线播放 | 欧美一区二区三区视频在线观看 | 在线观看av不卡 | 一区二区三区精品视频 | 国产在线一区二区三区 | 日本中文字幕在线视频 | 欧美日韩精品久久久免费观看 |