当前位置:   article > 正文

C 语言动态顺序表

C 语言动态顺序表

test.h

  1. #ifndef _TEST_H
  2. #define _TEST_H
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. typedef int data_type;
  7. // 定义顺序表结构体
  8. typedef struct List{
  9. data_type *data; // 顺序表数据
  10. int size; // 顺序表当前长度
  11. int count; // 顺序表容量
  12. }list;
  13. typedef enum{
  14. OK,
  15. LIST_EMPTY,
  16. LIST_FULL,
  17. INDEX_ERROR,
  18. }RETURNVALUE;
  19. list *create_list(void);
  20. int list_insert(list *plist, int index, data_type data);
  21. int list_show(list *plist);
  22. #endif

main.c

  1. #include "../include/test.h"
  2. int main()
  3. {
  4. int retval = 0;
  5. list *plist = create_list();
  6. retval = list_insert(plist, 0, 1);
  7. retval = list_insert(plist, 1, 2);
  8. retval = list_insert(plist, 2, 3);
  9. retval = list_insert(plist, 1, 4);
  10. retval = list_show(plist);
  11. return 0;
  12. }

crud.c

  1. #include "../include/test.h"
  2. // 创建动态顺序表
  3. list *create_list(void)
  4. {
  5. int list_size = 0; // 初始化顺序表大小
  6. list *plist = (list *)malloc(sizeof(list)); // 申请内存空间
  7. if(plist == NULL){
  8. perror("plist malloc error!");
  9. return NULL;
  10. }
  11. memset(plist, 0, sizeof(list)); // 清零
  12. // 手动输入顺序表大小
  13. printf("请输入顺序表大小:");
  14. scanf("%d", &list_size);
  15. // 申请内存空间
  16. plist->data = (data_type *)malloc(sizeof(data_type) * list_size);
  17. // 初始化顺序表的大小
  18. plist->size = list_size;
  19. return plist; // 返回顺序表指针
  20. }
  21. int list_insert(list *plist, int index, data_type data)
  22. {
  23. // 入参检测
  24. if(plist == NULL){
  25. return LIST_EMPTY;
  26. }
  27. // 检测顺序表是否已满
  28. if(plist->count == plist->size){
  29. return LIST_FULL;
  30. }
  31. // 检测插入位置是否合法
  32. if(index < -1 || index > plist->count){
  33. return INDEX_ERROR;
  34. }
  35. // 插入操作:尾插
  36. if(index == -1){
  37. plist->data[plist->count] = data;
  38. plist->count++;
  39. return OK;
  40. }
  41. // 移动元素,实际上在用户按规律顺序插入元素的时候,不会调用此循环,而是直接
  42. // 执行 plist->data[index] = data; 的操作
  43. for(int i = plist->count; i > index; i--){
  44. printf("for(int i = plist->count; i > index; i--){\n");
  45. plist->data[i] = plist->data[i - 1];
  46. }
  47. // 插入元素
  48. plist->data[index] = data;
  49. // 顺序表元素个数加一
  50. plist->count++;
  51. return OK;
  52. }
  53. int list_show(list *plist)
  54. {
  55. if(plist == NULL || plist->count == 0){
  56. return LIST_EMPTY;
  57. }
  58. // 遍历顺序表
  59. for(int i = 0; i < plist->count; i++){
  60. printf("%d\t\n", plist->data[i]);
  61. }
  62. putchar(10);
  63. return OK;
  64. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/919834
推荐阅读
相关标签
  

闽ICP备14008679号