次序表的实现

打印 上一主题 下一主题

主题 983|帖子 983|积分 2949

次序表的实现

次序表功能

  • 次序表初始化
  • 次序表插入元素
  • 次序表删除元素
  • 次序表查找元素
  1. /*****************************************************
  2. *   file name:sequencelist.c
  3. *   author   :zzlyx1239@126.com
  4. *   date     :2025.3.10
  5. *   brief    :顺序表的实现
  6. *   note     :none
  7. *
  8. *   Copyright (c) 2025 zzlyx1239@126.com All Right Reserved
  9. *
  10. *******************************************************/
  11. #include <stdio.h>
  12. #include <stdbool.h>
  13. #include <stdlib.h>
  14. /********************************************************
  15. *
  16. *   func name     :
  17. *   brief         :
  18. *   func parameter:
  19. *
  20. *   return        :none
  21. *   note          :none
  22. *   func author   :zzlyx1239@126.com
  23. *   data          :2025/3/10
  24. *   version       :V1.0
  25. *
  26. **************************************************************/
  27. //宏定义顺序表中的数据类型
  28. typedef  int DataType_t;
  29. //定义一个顺序表结构体,声明顺序表首地址,大小,最后一个数据下标等各项参数
  30. typedef struct SequenceList
  31. {
  32.     DataType_t     *Addr;//声明顺序表首地址
  33.     int            Size;//声明顺序表大小
  34.     int            Last;//声明顺序表最后一个元素数组下标
  35. }SeqList_t;
  36. //创建顺序列表并进行初始化
  37. SeqList_t* SeqList_Creat(unsigned int size)
  38. {
  39.     //1.为所有顺序表管理者申请堆内存
  40.     SeqList_t *Manager=(SeqList_t*)calloc(1,sizeof(Manager));
  41.     //判断是否申请成功
  42.     if(NULL==Manager)
  43.     {
  44.         perror("calloc for  Manager memory is failed!");
  45.         exit(-1);//异常退出
  46.     }
  47.     //2.为所有元素申请堆内存
  48.     Manager->Addr=(DataType_t*)calloc(size,sizeof(DataType_t));
  49.     if(NULL==Manager->Addr)
  50.     {
  51.         perror("calloc for Manager->Addr is failed!");
  52.         free(Manager);
  53.         exit(-1);//异常退出
  54.     }
  55.    
  56.     //3.对顺序表进行初始化
  57.     Manager->Size=size;
  58.     Manager->Last=-1;
  59.     return Manager;
  60. }
  61. //判断顺序表是否已经满了
  62. bool SeqList_IsFull(SeqList_t *Manager)
  63. {
  64.     return Manager->Size==Manager->Last+1?true:false;
  65. }
  66. //向顺序表中添加元素 头插法
  67. bool SeqList_HeadAdd(SeqList_t *Manager,DataType_t data)
  68. {
  69.     //判断顺序表是否已经满了
  70.     if(SeqList_IsFull(Manager))
  71.     {
  72.         printf("Sequence is Full!!!");
  73.         return false;
  74.     }
  75.     //顺序表没满,采用头插法插入数据
  76.     for(int i=Manager->Last; i>=0;i--)
  77.     {
  78.         Manager->Addr[i+1]=Manager->Addr[i];
  79.     }
  80.     Manager->Addr[0]=data;
  81.     Manager->Last++;
  82.     return true;
  83. }
  84. //向顺序表中添加元素 尾插法
  85. bool SeqList_TailAdd(SeqList_t *Manager,DataType_t data)
  86. {
  87.     //判断顺序表是否已经满了
  88.     if(SeqList_IsFull(Manager))
  89.     {
  90.         printf("Sequence is Full!!!");
  91.         return false;
  92.     }
  93.     //顺序表没满,采用尾插法插入数据
  94.     Manager->Addr[Manager->Last+1]=data;
  95.     Manager->Last++;
  96.     return true;
  97. }
  98. //判断顺序表是否为空
  99. bool SeqList_IsEmpty(SeqList_t *Manager)
  100. {
  101.         return (-1==Manager->Last)?true:false;
  102. }
  103. //删除指定数组下标的元素
  104. bool SeqList_DelTar(SeqList_t *Manager,int Temp)
  105. {
  106.         //判断顺序表是否为空
  107.     if(SeqList_IsEmpty(Manager))
  108.     {
  109.         printf("SeqList is Empty!!!");
  110.         return false;
  111.     }
  112.     //不为空,继续删除
  113.     if(Temp<=-1||Temp>Manager->Last)
  114.     {
  115.         printf("not find!!!");
  116.         return false;
  117.     }
  118.     for(int i=Temp;i<Manager->Last;i++)
  119.     {
  120.         Manager->Addr[i]=Manager->Addr[i+1];
  121.     }
  122.     Manager->Last--;
  123.     return true;
  124. }
  125. //删除顺序表指定数值的元素
  126. bool SeqList_DelData(SeqList_t* Manager,DataType_t DestVal)
  127. {
  128.     int temp=-1;//记录元素的数组下标
  129.     //判断顺序表是否为空
  130.     if(SeqList_IsEmpty(Manager))
  131.     {
  132.         printf("SeqList is Empty!!!");
  133.         return false;
  134.     }
  135.     //判断数值是否在顺序表内
  136.     for(int i=0;i<Manager->Last;i++)
  137.     {
  138.         if(Manager->Addr[i]==DestVal)
  139.         {
  140.             temp=i;
  141.             break;
  142.         }
  143.     }
  144.     //如果temp=-1;顺序表中并没有该元素,退出函数
  145.     if(-1==temp)
  146.     {
  147.         printf("destval [%d] is not found\n",DestVal);
  148.         return false;
  149.     }
  150.     SeqList_DelTar(Manager,temp);
  151.     return true;
  152. }
  153. //遍历顺序表中的元素
  154. void SeqList_Print(SeqList_t *Manager)
  155. {
  156.     for(int i=0; i<=Manager->Last;i++)
  157.     {
  158.         printf("Addr[%d]=%d\n",i,Manager->Addr[i]);
  159.     }
  160. }
  161. //
  162. int main(){
  163.     //1.创建顺序表
  164.         SeqList_t * Manager = SeqList_Creat(10);
  165.        
  166.         //2.向顺序表中的尾部插入新元素
  167.         SeqList_TailAdd(Manager,5);
  168.     SeqList_TailAdd(Manager,6);
  169.         //3.遍历顺序表
  170.         SeqList_Print(Manager); // -- 5
  171.         printf("\n");
  172.         //4.向顺序表中的头部插入新元素
  173.         SeqList_HeadAdd(Manager,9);
  174.         //5.遍历顺序表
  175.         SeqList_Print(Manager); // --9 5 6
  176.         printf("\n");
  177.         //6.删除顺序表的元素
  178.         SeqList_DelData(Manager,5);
  179.         //7.遍历顺序表
  180.         SeqList_Print(Manager); // --9
  181.         printf("\n");
  182.         return 0;
  183. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

滴水恩情

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表