• 数据结构:顺序表的增删改查


    顺序表

    逻辑结构体:线型

    物理结构:顺序存储

    malloc () ;

    功能:在堆区开辟一片空间

    返回值:成功返回首地址,失败返回NULL.

    参数:开辟空间的大小

    栈区:自动开辟自动释放局部变量

    全局:   未初始化0

    以初始化          声明周期,整个程序

    堆区:手动开辟,手动释放

    typedef  int *p

    P== int *q;

    p  q==int *q

    ——————————————————————————————————————————

    typedef  struct sqlist  *p;

    p==strucst  sqliste *

    p  q==struct  sqlist *q;

    头文件.h

    1. #ifndef _SQLIST_H
    2. #define _SQLIST_H
    3. typedef char sqlist_data_t;//方便修改数组类型
    4. #define N 1024 //方便修改数组大小
    5. struct sqlist{
    6. sqlist_data_t buf[N];
    7. int len;
    8. }; //方便书写
    9. typedef struct sqlist sql_node;
    10. typedef struct sqlist* sql_pnode;
    11. //创建顺序表,不传参数,使用malloc
    12. sql_pnode create_sqlist();
    13. //增删改查
    14. //插入
    15. int insert_sqlist(sql_pnode L, sqlist_data_t data, int pos);
    16. //判满
    17. int full_sqlist(sql_pnode L);
    18. //判空
    19. int empty_sqlist(sql_pnode);
    20. //打印
    21. int show_sqlist(sql_pnode L);
    22. //删除 按照位置删除
    23. int delete_sqlist(sql_pnode L, int pos);
    24. //查找 元素查位置
    25. int search_sqlist(sql_pnode L, sqlist_data_t data);
    26. //清空
    27. int clean_sqlist(sql_pnode L);
    28. //销毁
    29. int destory_sqlist(sql_pnode *L);
    30. #endif

    源文件.c

    1. #include //malloc函数需要的头文件
    2. #include "sqlist.h"
    3. #include
    4. //创建顺序表,不传参数,使用malloc
    5. sql_pnode create_sqlist()
    6. {
    7. //创建空间
    8. sql_pnode L = (sql_pnode)malloc(sizeof(sql_node));
    9. if(NULL == L)
    10. {
    11. printf("malloc is default\n"); //方便调试
    12. return NULL;
    13. }
    14. //初始化
    15. L->len = 0;
    16. return L;
    17. }
    18. //插入
    19. int insert_sqlist(sql_pnode L, sqlist_data_t data, int pos)
    20. {
    21. //判断顺序表首地址有没有问题
    22. if(NULL == L)
    23. {
    24. printf("L is NULL\n");
    25. return -1;
    26. }
    27. //判断插入位置是否有问题
    28. if(pos < 0 || pos > L->len)
    29. {
    30. printf("pos is default\n");
    31. return -1;
    32. }
    33. //判断顺序表是否为满
    34. if(0 == full_sqlist(L))
    35. {
    36. printf("sqliste is full\n");
    37. return -1;
    38. }
    39. //插入
    40. //移动
    41. int i;
    42. for(i = L->len-1; i >= pos; i--)
    43. {
    44. L->buf[i+1] = L->buf[i];
    45. }
    46. //赋值
    47. L->buf[pos] = data;
    48. L->len++;
    49. return 0;
    50. }
    51. //判满
    52. int full_sqlist(sql_pnode L)
    53. {
    54. if(L->len == N)
    55. return 0;
    56. else
    57. return -1;
    58. }
    59. //判空
    60. int empty_sqlist(sql_pnode L)
    61. {
    62. if( 0 == L->len)
    63. return 0;
    64. else
    65. return -1;
    66. }
    67. //打印
    68. int show_sqlist(sql_pnode L)
    69. {
    70. //判断顺序表首地址有没有问题
    71. if(NULL == L)
    72. {
    73. printf("L is NULL\n");
    74. return -1;
    75. }
    76. //判空
    77. if(0 == empty_sqlist(L))
    78. {
    79. printf("L is empty\n");
    80. return -1;
    81. }
    82. int i;
    83. for(i = 0; i < L->len; i++)
    84. {
    85. printf("buf[%d]=%c ", i,L->buf[i]);
    86. }
    87. puts("");
    88. return 0;
    89. }
    90. //删除 按照位置删除
    91. int delete_sqlist(sql_pnode L, int pos)
    92. {
    93. //判断顺序表首地址有没有问题
    94. if(NULL == L)
    95. {
    96. printf("L is NULL\n");
    97. return -1;
    98. }
    99. //判断插入位置是否有问题
    100. if(pos < 0 || pos >= L->len)
    101. {
    102. printf("pos is default\n");
    103. return -1;
    104. }
    105. //判断顺序表是否为满
    106. if(0 == empty_sqlist(L))
    107. {
    108. printf("sqliste is empty\n");
    109. return -1;
    110. }
    111. int i;
    112. for(i = pos; i < L->len-1; i++)
    113. {
    114. L->buf[i] = L->buf[i+1];
    115. }
    116. L->len--;
    117. return 0;
    118. }
    119. //查找 元素查位置
    120. int search_sqlist(sql_pnode L, sqlist_data_t data)
    121. {
    122. //判断顺序表首地址有没有问题
    123. if(NULL == L)
    124. {
    125. printf("L is NULL\n");
    126. return -1;
    127. }
    128. //判断顺序表是否为空
    129. if(0 == empty_sqlist(L))
    130. {
    131. printf("sqliste is empty\n");
    132. return -1;
    133. }
    134. int i;
    135. for(i = 0; i < L->len ;i++)
    136. {
    137. if(data == L->buf[i])
    138. return i;
    139. }
    140. printf("no search the data\n");
    141. return -1;
    142. }
    143. //清空
    144. int clean_sqlist(sql_pnode L)
    145. {
    146. //判断顺序表首地址有没有问题
    147. if(NULL == L)
    148. {
    149. printf("L is NULL\n");
    150. return -1;
    151. }
    152. //判断顺序表是否为空
    153. if(0 == empty_sqlist(L))
    154. {
    155. printf("sqliste is empty\n");
    156. return -1;
    157. }
    158. L->len = 0;
    159. return 0;
    160. }
    161. //消耗
    162. int destory_sqlist(sql_pnode *L)
    163. {
    164. //判断顺序表首地址有没有问题
    165. if(NULL == *L)
    166. {
    167. printf("L is NULL\n");
    168. return -1;
    169. }
    170. free(*L); //释放空间
    171. *L = NULL;
    172. return 0;
    173. }

    main函数.c文件(函数调用)

    1. #include "sqlist.h"
    2. #include
    3. int main()
    4. {
    5. sql_pnode L = create_sqlist();
    6. insert_sqlist(L,'A',0);
    7. insert_sqlist(L,'B',0);
    8. insert_sqlist(L,'C',0);
    9. insert_sqlist(L,'D',0);
    10. show_sqlist(L);
    11. delete_sqlist(L,2);
    12. show_sqlist(L);
    13. int pos = search_sqlist(L,'A');
    14. printf("pos = %d\n", pos);
    15. clean_sqlist(L);
    16. show_sqlist(L);
    17. destory_sqlist(&L);
    18. show_sqlist(L);
    19. }

    Makefile

    1. OBJS=sqlist.o main.o
    2. CFLAGS=-O -g -o
    3. sqlist:$(OBJS)
    4. $(CC) $^ $(CFLAGS) $@
    5. sqlist.o:sqlist.c sqlist.h
    6. $(CC) -c $< $(CFLAGS) $@
    7. main.o:main.c
    8. $(CC) -c $^ $(CFLAGS) $@
    9. .PHONY:clean
    10. clean:
    11. $(RM) $(OBJS) sqlist

  • 相关阅读:
    算法通关村第17关【白银】| 贪心高频问题
    phpstorm运行php项目步骤
    Youtube新手运营——你需要的技巧与工具
    MySQL安装配置教程 (手把手保姆级安装)
    图的基本概念
    Mybatis的使用
    WIN10/Ubuntu双系统安装流程
    2022数字技能职业教育生态研讨会
    低代码平台的分类及选择参考
    OpenCV-Python实战(4) —— OpenCV 五角星各点在坐标系上面的坐标计算(以重心为原点)
  • 原文地址:https://blog.csdn.net/qq_63626307/article/details/126326502