• 线性表


    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #define TRUE 1
    4. #define FALSE 0
    5. #define OK 1
    6. #define ERROR 0
    7. #define INFEASIBLE -1
    8. #define OVERFLOW -2
    9. #define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量
    10. #define LISTINCREMENT 10 // 线性表存储空间的分配增量
    11. typedef int Status;
    12. typedef int ElemType;
    13. typedef struct
    14. {
    15. ElemType *elem; // 存储空间基址
    16. int length; // 当前长度
    17. int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位)
    18. }SqList;
    19. Status InitList_Sq(SqList *L);
    20. Status ListInsert_Sq(SqList *L, int i, ElemType *e);
    21. int main()
    22. {
    23. SqList sl;
    24. if(InitList_Sq(&sl) == 1)
    25. {
    26. printf("创建成功!");
    27. int i = 0;
    28. int newElem1 = 33;
    29. int newElem2 = 25;
    30. int newElem3 = 11;
    31. int newElem4 = 43;
    32. i = ListInsert_Sq(&sl, 1, &newElem1);
    33. if(i == 1)
    34. {
    35. printf("%d ", *(sl.elem));
    36. printf("插入成功!");
    37. }
    38. else
    39. {
    40. printf("插入失败!");
    41. }
    42. i = ListInsert_Sq(&sl, 2, &newElem2);
    43. if(i == 1)
    44. {
    45. printf("%d ", *(sl.elem + 1));
    46. printf("插入成功!");
    47. }
    48. else
    49. {
    50. printf("插入失败!");
    51. }
    52. i = ListInsert_Sq(&sl, 1, &newElem3);
    53. if(i == 1)
    54. {
    55. printf("%d ", *(sl.elem));
    56. printf("插入成功!");
    57. }
    58. else
    59. {
    60. printf("插入失败!");
    61. }
    62. i = ListInsert_Sq(&sl, 2, &newElem4);
    63. if(i == 1)
    64. {
    65. printf("%d ", *(sl.elem + 1));
    66. printf("插入成功!");
    67. }
    68. else
    69. {
    70. printf("插入失败!");
    71. }
    72. }
    73. else
    74. {
    75. printf("创建失败!");
    76. }
    77. return 0;
    78. }
    79. Status InitList_Sq(SqList *L)
    80. {
    81. L->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
    82. if(!L->elem) exit(OVERFLOW); // 存储分配失败
    83. L->length = 0; // 空表长度为0
    84. L->listsize = LIST_INIT_SIZE; // 初始存储容量
    85. return OK;
    86. }// InitList_Sq
    87. Status ListInsert_Sq(SqList *L, int i, ElemType *e)
    88. {
    89. // 在顺序线性表L中第i个位置之前插入新的元素e,
    90. // i的合法值为 1 <= i <= ListLength_Sq(L) + 1
    91. ElemType *q = NULL, *p = NULL;
    92. if(i < 1 || i > L->length + 1) return ERROR; // i值不合法
    93. if(L->length == 0) // 如果是第一个插入元素,则在首地址插入
    94. {
    95. *(L->elem) = *e; // 插入e
    96. ++L->length; // 表长增1
    97. return OK;
    98. }
    99. else
    100. {
    101. if(L->length >= L->listsize) // 当前存储空间已满,增加分配
    102. {
    103. ElemType *newbase = (ElemType *)realloc(L->elem, (L->listsize + LISTINCREMENT) * sizeof(ElemType));
    104. if(!newbase) exit(OVERFLOW); // 存储分配失败
    105. L->elem = newbase; // 新基址
    106. L->listsize += LISTINCREMENT; // 增加存储容量
    107. }
    108. //*q = &(L->elem[i-1]); // q为插入位置
    109. q = L->elem + (i - 1); // q为插入位置
    110. for(p = L->elem + (L->length - 1); p >= q; --p) // 插入位置及之后的元素右移
    111. {
    112. *(p + 1) = *p;
    113. }
    114. *q = *e; // 插入e
    115. ++L->length; // 表长增1
    116. return OK;
    117. }
    118. }// ListInsert_Sq





    附件列表

    • 相关阅读:
      Cygwin下,不让VIM自动生成~备份文件
      Cygwin下,从windows复制粘贴到vim中
      nasm汇编指令, partcopy复制指令
      如何编写自己的操作系统(1)
      已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性
      Jquery 仿手机滑屏效果 LyhucTouchSlider
      xp QQ2009无法卸载
      DataContract 添加到 DataContractSet,因为已经存在数据协定名称也为命名空间
      Jquery Slider 插件 lyhucSlider
      C# 年会抽奖程序
    • 原文地址:https://www.cnblogs.com/sober-reflection/p/48002483e118c6b58bef4bce9d650601.html
    Copyright © 2020-2023  润新知