顺序表3中删除元素的方式(你造吗)

#include<iostream>
#include<cstring>
#include<string>
#include<queue>
#include<map>
#include<cstdio>
using namespace std;

template <typename T>
class Sqlist{
    public:
        T data[100];
        int n;
        void initData();
        void deleteXone(T x);
        void deleteXtwo(T x);
        void deleteXthree(T x);
        void outData();
    private:
};

template <typename T>
void Sqlist<T>::outData(){
    for(int i=0; i<n; ++i)
        cout<<data[i]<<" ";
    cout<<endl;
} 

template <typename T>
void Sqlist<T>::initData(){
    cin>>n;
    for(int i=0; i<n; ++i)
        cin>>data[i];
}

template <typename T>
void Sqlist<T>::deleteXone(T x){
     int k = 0;
     for(int i=0; i<n; ++i)
         if(data[i] != x)//如果当前元素是 x,那么忽略该元素
             data[k++] = data[i];
     n = k;
     outData();
}

template <typename T>
void Sqlist<T>::deleteXtwo(T x){
     int k = 0;//记录空位的数目
     for(int i=0; i<n; ++i){
         if(data[i]==x)
             ++k;
         else
             data[i-k] = data[i];//向前移动k个位置
     }
     n = n-k;
     outData();
}

template <typename T>
void Sqlist<T>::deleteXthree(T x){
     int i=0, j=n-1, k=0;
     while(i < j) {//不断的将data右边非x的元素 移向 data左边是x的元素的位置
         while(data[i]!=x && i<j) ++i;
         while(data[j]==x && i<j) --j;
         if(i>=j) break;
         data[i] = data[j];
         ++k;
     }
     n = n-k;
     outData();
}

int main() {
    Sqlist<int> sq;
    sq.initData();
    sq.deleteXone(2);
    sq.deleteXtwo(0);
    sq.deleteXthree(4);
    return 0;
}
/*
1 2 0 3 4 6 8 5 9 7
*/
时间: 2024-11-02 17:31:49

顺序表3中删除元素的方式(你造吗)的相关文章

顺序表应用3:元素位置互换之移位算法

顺序表应用3:元素位置互换之移位算法 Time Limit: 1000MS Memory Limit: 570KB Problem Description 一个长度为len(1<=len<=1000000)的顺序表,数据元素的类型为整型,将该表分成两半,前一半有m个元素,后一半有len-m个元素(1<=m<=len),借助元素移位的方式,设计一个空间复杂度为O(1)的算法,改变原来的顺序表,把顺序表中原来在前的m个元素放到表的后段,后len-m个元素放到表的前段. 注意:先将顺序表

线性表-数据结构顺序表合并中指针怎么用才能运行?

问题描述 数据结构顺序表合并中指针怎么用才能运行? 已知线性表LA和LB中的数据元素按值非递减有序,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列. 怎么改呢? 初学,数据结构小白 额..,用的顺序表 解决方案 http://blog.sina.com.cn/s/blog_9671d51801019cpj.html 解决方案二: 数据结构笔记--顺序表数据结构 顺序表及合并数据结构之顺序表

顺序表应用4:元素位置互换之逆置算法

顺序表应用4:元素位置互换之逆置算法 Time Limit: 10MS Memory Limit: 570KB Problem Description 一个长度为len(1<=len<=1000000)的顺序表,数据元素的类型为整型,将该表分成两半,前一半有m个元素,后一半有len-m个元素(1<=m<=len),设计一个时间复杂度为O(N).空间复杂度为O(1)的算法,改变原来的顺序表,把顺序表中原来在前的m个元素放到表的后段,后len-m个元素放到表的前段. 注意:先将顺序表元

顺序表应用4-2:元素位置互换之逆置算法(数据改进)

顺序表应用4-2:元素位置互换之逆置算法(数据改进) Time Limit: 80MS Memory Limit: 600KB Problem Description 一个长度为len(1<=len<=1000000)的顺序表,数据元素的类型为整型,将该表分成两半,前一半有m个元素,后一半有len-m个元素(1<=m<=len),设计一个时间复杂度为O(N).空间复杂度为O(1)的算法,改变原来的顺序表,把顺序表中原来在前的m个元素放到表的后段,后len-m个元素放到表的前段. 注

关于c语言实现动态顺序表的插入删除

问题描述 关于c语言实现动态顺序表的插入删除 3C #include ""stdafx.h""#includeconst int MAXSIZE = 10;typedef struct{ int *elem; int length; int maxsize;}sqlist;void initList(sqlist *L){ L->elem = (int *)malloc(L->maxsize*sizeof(int)); if (!L->elem)

Java如何在List或Map遍历过程中删除元素_java

遍历删除List或Map中的元素有很多种方法,当运用不当的时候就会产生问题.下面通过这篇文章来再学习学习吧. 一.List遍历过程中删除元素 使用索引下标遍历的方式 示例:删除列表中的2 public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(2); list.add(3); list.add(

python实现从字典中删除元素的方法

  本文实例讲述了python实现从字典中删除元素的方法.分享给大家供大家参考.具体分析如下: python的字典可以通过del方法进行元素删除,下面的代码详细演示了这一过程 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # Create an empty dictionary d = {} # Add an item d["name"] = "Fido" assert d.has_key("name") # Del

PHP从数组中删除元素的四种方法实例

茴香豆的"茴"字有四种写法,PHP从数组中删除元素也有四种方法 ^_^. 删除一个元素,且保持原有索引不变 使用 unset 函数,示例如下: <?php $array = array(0 => "a", 1 => "b", 2 => "c"); unset($array[1]); //↑ 你想删除的key ?> 输出: Array (     [0] => a     [2] =>

php数组中删除元素之重新索引

 如果要在某个数组中删除一个元素,可以直接用的unset,但今天看到的东西却让我大吃一惊 <?php   $arr = array('a','b','c','d');   unset($arr[1]);   print_r($arr);   ?>    print_r($arr) 之后,结果却不是那样的,最终结果是 Array ( [0] => a [2] => c [3] => d )   那么怎么才能做到缺少的元素会被填补并且数组会被重新索引呢?答案是 array_spl