区别顺序表的清空和销毁两个操作

区别顺序表的清空和销毁两个操作

清空操作,把表中的元素清空,但已表结构依然存在于内存中,它的实现方法是:

Status ClearList_Sq(SqList &L)

{

   L.length = 0;

         return(OK);

}

因为插入、删除、查找等操作都会对参数有一个类似限制条件:if(i>L.length || i<1),这样就保证了在把length设为0后,其他操作就不能访问到原来的那些元素(实质上原来的元素还是在内存空间里的,如果直接用索引去访问,任然可以把元素读取出来的),那么就可以认为length=0的表是空表,此条件也就是判断表是否为空的唯一依据。

销毁操作,则是把表的整一个结构给消灭掉,把原来所占有的内存空间都给释放出来,它的实现是:

Status DestroyList_Sq(SqList &L)

{

         //ifthis list is init then destroy it

         if(L.elem){

                   free(L.elem);

                   L.elem= NULL;

                   L.length= 0;

                   L.listsize= 0;

         }

   //else return error_msg

         else{

                   return(ERROR);

         }

 

         return(OK);

}

  • 15
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设两个顺序表la和lb已经按照从小到大的顺序排好了序,那么可以按照以下步骤合并: 1. 定义一个新的顺序表lc,作为合并后的结果。 2. 从la和lb的第一个元素开始比较,将较小的元素插入lc中,并把该元素所在的顺序表的指针向后移动一位。 3. 重复上述步骤,直到其中一个顺序表的元素全部插入到lc中。 4. 将另一个顺序表剩余的元素依次插入到lc的尾部。 5. 合并完成后,lc即为合并后的新顺序表。 以下是一个示例代码: ```c #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 // 定义顺序表的最大长度 typedef struct { int data[MAXSIZE]; // 顺序表存储的数据 int length; // 顺序表的长度 } SqList; // 合并两个顺序表la和lb,结果存储在lc中 void mergeList(SqList la, SqList lb, SqList *lc) { int i = 0, j = 0, k = 0; while (i < la.length && j < lb.length) { if (la.data[i] <= lb.data[j]) { lc->data[k++] = la.data[i++]; } else { lc->data[k++] = lb.data[j++]; } } while (i < la.length) { lc->data[k++] = la.data[i++]; } while (j < lb.length) { lc->data[k++] = lb.data[j++]; } lc->length = k; } int main() { SqList la = {{1, 3, 5, 7, 9}, 5}; // 顺序表la SqList lb = {{2, 4, 6, 8, 10}, 5}; // 顺序表lb SqList lc; // 合并后的顺序表lc mergeList(la, lb, &lc); for (int i = 0; i < lc.length; i++) { printf("%d ", lc.data[i]); } printf("\n"); return 0; } ``` 上述代码中,mergeList函数实现了两个顺序表的合并,最终结果存储在lc中。在main函数中,我们定义了两个顺序表la和lb,将它们合并后存储在lc中,并输出lc中的所有元素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值