• [C语言、C++]数据结构作业:线性表-顺序表的基本操作


    实现顺序表的结构定义基本操作并进行测试。

    基本操作为:

    初始化,在某编号节点插入元素,删除编号为某节点的元素并返回该元素,取某编号节点,遍历顺序表,清空顺序表,销毁顺序表,顺序表中查找某个值的元素的编号,

    ------------------

    要求:

    main中:

    1)声明一个顺序表,初始化

    2)在该顺序表中插入1,2,3,4,5,每次均在编号1处

    3)遍历

    4)在编号6插入6

    5)分别查找并打印5,6,2这三个元素及其位置

    6)在编号2插入7,8,9,10,11

    7)遍历

    8)删除第一个位置的元素,并打印该元素

    9)删除第一个位置的元素,并打印该元素

    10)遍历

    11)删除第编号为9的元素,并打印该元素,打印此时顺序表长度

    12)遍历

    13)清空顺序表并打印顺序表长度

    14)在第2编号处插入10,结果插入成功,打印“成功插入”,否则打印“插入不成功”

    15)依次插入1,2,3,4,5,每次均在最后一个结点的后一个位置处

    16)遍历

    17)销毁顺序表

    1. #include
    2. using namespace std;
    3. typedef int ElemType;
    4. typedef int Status;
    5. #define MAXSIZE 100
    6. #define INITSIZE 100
    7. #define OK 1
    8. #define ERROR 0
    9. typedef struct {
    10. ElemType* elem; //存储空间的基地址
    11. int length; //当前长度
    12. int listsize;
    13. } SqList; //顺序表的结构类型为SqList
    14. Status InitList(SqList& L) {//分配
    15. L.elem = new ElemType[INITSIZE];
    16. if (!L.elem) {
    17. cout << "存储分配失败!" << endl;
    18. exit(1);
    19. return ERROR;
    20. }
    21. L.length = 0; L.listsize = INITSIZE;
    22. }
    23. Status Listinsert(SqList& L, int i, ElemType e){//插入函数
    24. if (i < 1 || i > L.length + 1) return ERROR;
    25. if (L.length >= L.listsize) return ERROR;//老师说ListExtend()可以先不写
    26. //移动元素,对i=L.length+1,无须移动
    27. for (int j = L.length - 1; j >= i - 1; j--)
    28. L.elem[j + 1] = L.elem[j];
    29. L.elem[i - 1] = e; //实际插在数组第i-1个位置
    30. L.length++;
    31. return OK;
    32. }
    33. Status ListDelete(SqList& L, int i) {//删除函数
    34. int e;
    35. if ((i < 1) || (i > L.length)) {
    36. return ERROR; //i值不合法
    37. }
    38. e = L.elem[i - 1];
    39. for (int j = i; j <= L.length - 1; j++) {
    40. L.elem[j - 1] = L.elem[j]; //被删除元素之后的元素前移
    41. }
    42. printf("被删除的元素为%d\n", e);
    43. --L.length; //表长减 1
    44. return OK;
    45. }
    46. Status printList(SqList L)//遍历打印
    47. {
    48. if (L.length == 0)
    49. {
    50. printf("线性表为空\n");
    51. return 0;
    52. }
    53. int i;
    54. for (i = 0; i < L.length; i++)
    55. {
    56. printf("编号为%d,元素值:elem[%d]=%d\n",i+1, i,L.elem[i]);
    57. }
    58. printf("\n");
    59. return OK;
    60. }
    61. Status LocateELem(SqList L, ElemType e) {
    62. //在顺序表中查找值为e的数据元素, 返回其序号
    63. for (int i = 0; i < L.length; i++) {
    64. if (L.elem[i] == e){
    65. return i + 1; //查找成功, 返回序号 i+l
    66. }
    67. }
    68. return ERROR; //查找失败, 返回 0
    69. }
    70. void ClearList(SqList& L) //清空线性表
    71. {
    72. L.length = 0;
    73. }
    74. Status Getlength(SqList L){
    75. return L.length;
    76. }
    77. void DestroyList_Sq(SqList& L) //销毁线性表
    78. {
    79. free(L.elem);
    80. L.elem = NULL;
    81. L.length = 0;
    82. L.listsize = 0;
    83. }
    84. int main() {
    85. SqList lists;
    86. InitList(lists);//1)声明一个顺序表,初始化
    87. for (int i = 1; i <= 6; i++) {//2)在该顺序表中插入1,2,3,4,5,每次均在编号1处
    88. Listinsert(lists, 1, i);
    89. }
    90. printList(lists);//3)遍历
    91. Listinsert(lists, 6, 6);//4)在编号6插入6
    92. printf("元素 5 的位置是%d\n",LocateELem(lists, 5));//5)分别查找并打印5,6,2这三个元素及其位置
    93. printf("元素 6 的位置是%d\n",LocateELem(lists, 6));
    94. printf("元素 2 的位置是%d\n",LocateELem(lists, 2));
    95. for (int i = 7; i <= 11; i++) {//6)在编号2插入7,8,9,10,11
    96. Listinsert(lists, 2, i);
    97. }
    98. printList(lists);//7)遍历
    99. ListDelete(lists, 1);//8)删除第一个位置的元素,并打印该元素
    100. ListDelete(lists, 1);//9)删除第一个位置的元素,并打印该元素
    101. printList(lists);//遍历
    102. ListDelete(lists, 9);//11)删除第编号为9的元素,并打印该元素,
    103. printf("此时表的长度为%d\n",Getlength(lists));//打印此时顺序表长度
    104. printList(lists);//12)遍历
    105. ClearList(lists); //13)清空顺序表
    106. printf("此时表的长度为%d\n", Getlength(lists));//13)并打印顺序表长度
    107. if (Listinsert(lists, 2, 10)) {//14)在第2编号处插入10,结果插入成功,打印“成功插入”,否则打印“插入不成功”
    108. printf("成功插入\n");//结果插入成功,打印“成功插入”
    109. }
    110. else {
    111. printf("插入不成功\n");//否则打印“插入不成功
    112. }
    113. for (int i = 1; i <= 5; i++) {//15)依次插入1,2,3,4,5,每次均在最后一个结点的后一个位置处
    114. Listinsert(lists, Getlength(lists)+1, i);
    115. }
    116. printList(lists);//16)遍历
    117. DestroyList_Sq(lists);//17)销毁顺序表
    118. printf("线性表已销毁!");
    119. }

  • 相关阅读:
    算法训练营 - 贪心
    JVM面试题总结
    Go语言的断点续传
    手把手带你使用JWT实现单点登录
    面试题泄漏|offer妥妥到手
    C# 读写TXT文件
    SpringBoot:分页Pageable最大size配置
    Python 交易指南:利用 RSI
    显卡---显卡驱动---CUDA---Cudnn
    使用P5.js来制作一个快乐的小风车动画
  • 原文地址:https://blog.csdn.net/ZDEWBYE/article/details/126920608