没有什么特别的,只是本身感受这两个小算法比较特别,让本身知道问题也能够这么考虑node
/******************************************** * 文件名称:proc_sqlist.c * 文件描述:习题练习 * 文件做者:by Wang.J,in 2013.11.17 * 文件版本:1.0 * 修改记录: *********************************************/ #include <stdio.h> #include "sqlist.h" /* 存在一个顺序表,设计一个算法,删除其中全部值等于x的元素. 要求算法的时间复杂度为O(n),空间复杂度为O(1). */ /* 方法一:扫描顺序表L,重建一个不包含x值得全部元素的新顺序表 */ /*=================================================== * 函数名称:delnode1 * 函数功能:使用方法一实现功能 * 函数参数:sqlist *L 已经存在的顺序表 elemtype x 参考元素 * 返 回 值:void * 创 建 人:by Wang.J,in 2013.11.17 * 修改记录: ====================================================*/ void delnode1(sqlist *L, elemtype x) { int k = 0, i = 0; //k记录值不等于x的元素个数 for (i = 0; i < L->len; i++) { if (x != L->data[i]) { //元素的值若是不等于x则插入L中 L->data[k] = L->data[i]; k++; //不等于x的个数+1 } } L->len = k; //新顺序表的长度等于新的元素的个数,尽管后面可能还有元素,可是已经表示为没有了 } /* 方法二:用k记录顺序表中x元素的个数,一边扫描L一遍统计k,并将不为x 的元素前移k个位置,最后修正L的长度 */ /*=================================================== * 函数名称:delnode2 * 函数功能:使用方法二实现功能 * 函数参数:sqlist *L 已经存在的顺序表 elemtype x 参考元素 * 返 回 值:void * 创 建 人:by Wang.J,in 2013.11.17 * 修改记录: ====================================================*/ void delnode2(sqlist *L, elemtype x) { int k = 0, i = 0; for (i = 0; i < L->len; i++) { if (x == L->data[i]) k++; else L->data[i-k] = L->data[i]; } L->len -= k; }