数据结构复习之顺序表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;
}
/*
10
1 2 0 3 4 6 8 5 9 7
*/ 
时间: 2024-10-24 11:57:53

数据结构复习之顺序表3中删除元素的方式(你造吗)的相关文章

顺序表添加与删除元素以及 php实现顺序表实例

对顺序表的操作,添加与删除元素. 增加元素 如下图所示  对顺序列表 Li [1328,693,2529,254]  添加一个元素 111 ,有三种方式: a)尾部端插入元素,时间复杂度O(1);    保证了原始顺序列表的顺序. b)非保序的加入元素(不常见),时间复杂度O(1);   打乱了原始顺序列表的顺序. c)保需的元素插入,时间复杂度O(n);    保证了原始顺序列表的顺序. 删除元素 如下图所示  对顺序列表 Li [1328,693,2529,254]  删除元素 ,有三种方式

顺序表插入、删除算法用C语言来实现

#include<stdio.h> #include<stdlib.h> //-------- 线性表的动态分配顺序存储结构 ----------- int LIST_INIT_SIZE=100;   //顺序表存储空间初始尺寸 int LISTINCREMENT=10;  //顺序表存储空间分配增量 typedef  int  ElemType;          //顺序表元素的数据类型为整数 //存储结构定义:顺序表 typedef struct { ElemType *el

Windows 已在 数据结构_顺序表.exe 中触发一个断点——new和delete注意事项

实现数据结构的顺序表的类时,输入,改,删,查都可以,但是最后析构函数时持续出错 错误提示"Windows 已在 数据结构_顺序表.exe 中触发一个断点" int *elem=new int(LIST_INIT_SIZE); if(!elem)cout<<"overflow"<<endl; if(leng>LIST_INIT_SIZE) cout<<"error"; else {    length=le

C#(数据结构):1.顺序表结构

我们程序员有三大优点:懒.困.自负.很荣幸我这三点都占了.但是木有关系这丝毫动摇不了我学习的决心.因为技术没有止境. -------------------------------------------------------------------------------------万恶的分割线------------------------------------------------------ 一个人生的分割线. 曾多少次我告诉自己要和昨天的自己说再见.不带走自己的过去,新中幻想着永

数据结构 --- 02. 内存, 顺序表, 单链表

一.内存 1.基本概念 计算机的作用: 就是用来存储和运算二进制的数据 变量的概念: 就是计算机中的某一块内存空间   衡量计算机内存大小的范围: bit byte kb mb 计算机中内存空间都会有两个基本的属性 大小 地址 不同数据占用内存空间的大小 整数:4byte float:4byte double:8byte 字符:1byte 理解a=10的内存图(引用,指向) 指向:如果一个变量存储了某一块内存空间的地址,则表示该变量指向该块内存 引用:如果一个变量存储了某一块内存空间的地址,则该

顺序表 初始化 插入 删除 查找 合并 交换 判断为空 求长度

#include <stdio.h> #include <stdlib.h> #define OK 1 #define TRUE 1 #define ERROR -1 #define FALSE -1 #define OVERFLOW -2 #define ElemType int #define Status int typedef int ElemType typedef int Status #define LEN sizeof(SqList) #define MLC (Li

C#(数据结构):1.顺序表结构(2)

人生总有那么多未完的篇章,但是有时候今天你没完成的可能你以后再也不会完成.承诺的一切兴许也变成了过眼云烟.想抓住,握紧的拳头却使他们溜的更快.人生恰如初见,几多的欣喜. ----------------------------------------------------------------------------------------------万恶的分割线------------------------------------------------ 分割线都受不了了.好吧之前我们说

C++ 数据结构学习一(顺序表)

//sequentiallist.h 顺序表模板类 #ifndef SEQUENTIAL_LIST_HXX#define SEQUENTIAL_LIST_HXX using std::cout; using std::endl; const int MaxSize=100; //顺序表数组最大值 template<class T>class SeqList //定义模板类SeqList(顺序表){ public: SeqList() { length=0; } //无参构造函数,建立一个空的顺

数据结构——Java实现顺序表

一.分析 什么是顺序表?顺序表是指用一组地址连续的存储单元依次存储各个元素,使得在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中的线性表.一个标准的顺序表需要实现以下基本操作: 1.初始化顺序表 2.销毁顺序表 3.清空顺序表 4.检测顺序表是否为空 5.返回顺序表的元素个数 6.返回顺序表中指定位置元素的值 7.返回顺序表中第一个与指定值相同的元素的位置 8.返回指定元素的直接前驱 9.返回指定元素的直接后继 10.向指定位置插入元素 11.删除指定位置的元素 12.遍历顺序表 在Java