#include <iostream>
#include <stdlib.h>
#define MAX_SIZE 100
using namespace std; typedef struct _SqList {
int* elems; //顺序表的基地址
int size; //顺序表的大小
int length; //顺序表的长度
}SqList; bool initSqList(SqList& L) { //初始化顺序表
L.elems = new int[MAX_SIZE];
if (!L.elems) {
return false;
}
L.size = MAX_SIZE;
L.length = 0;
return true;
}
void PrintSqList(SqList& L) { //打印输出顺序表
cout << "顺序表的长度为" << L.length << " ,顺序表的大小为" << L.size << endl;
for (int i = 0; i < L.length; i++) {
cout << L.elems[i] << " ";
}
cout << endl;
}
bool SqListAppend(SqList& L,int e) { //在顺序表尾部添加元素
if (L.length == L.size) { //顺序表空间已满
return false;
}
L.elems[L.length] = e;
L.length++;
return true;
}
bool SqListInsert(SqList& L, int i, int e) { //在顺序表的指定位置插入元素
if (i < 0 || i >= L.length) return false;
if (L.length == L.size) return false;
for (int j = L.length - 1; j >=i; j--) {
L.elems[j + 1] = L.elems[j];
}
L.elems[i] = e;
L.length++;
return true;
}
bool SqListDeleteI(SqList& L, int i) { //删除顺序表中指定位置的元素
if (!L.elems) return false;
if (i < 0 || i >= L.length) return false;
if (i == L.length - 1) { //直接删除顺序表最后一个元素
L.length--;
return true;
}
for (int j = i; j < L.length; j++) {
L.elems[j] = L.elems[j+1]; //被删除元素后面的元素全部前移一位
}
L.length--;
return true;
}
bool SqListDeleteE(SqList& L,int e) { //删除顺序表中指定的所有元素
if (!L.elems) return false;
int n = 0;//记录不等于e的元素个数
for (int i = 0; i < L.length; i++) { //从前往后扫描
if (L.elems[i] != e) {
L.elems[n] = L.elems[i]; //利用原表的空间记录值不为e的元素
n++;
}
}
L.length = n;
return true;
}
void SqListDestory(SqList& L) { //销毁顺序表
if (L.elems) delete[] L.elems; //释放存储空间
L.length = 0;
L.size = 0;
}
int main() {
SqList list; //创建顺序表list
int e = 0; //顺序表要插入的元素
int count = 0; //顺序表要插入的元素个数
int i = 0; //顺序表的元素位置 //初始化顺序表
if (initSqList(list)) {
cout << "顺序表初始化成功!" << endl;
}
else {
cout << "顺序表初始化失败!" << endl;
}
PrintSqList(list); //在顺序表尾部添加元素
cout << "请输入要添加的元素个数:";
cin >> count;
for (int i = 0; i < count; i++) {
cout << "请输入要添加的元素:";
cin >> e;
if (SqListAppend(list, e)) {
cout << "添加成功!" << endl;
}
else {
cout << "添加失败!" << endl;
}
}
PrintSqList(list); //在顺序表的指定位置插入元素
cout << "请输入要插入的元素位置和元素:";
cin >> i >> e;
if (SqListInsert(list, i, e)) {
cout << "插入成功!" << endl;
}
else {
cout << "插入失败!" << endl;
}
PrintSqList(list); //删除顺序表中指定位置的所有元素
cout << "请输入要删除的元素位置:";
cin >> i;
int n = list.elems[i];
if (SqListDeleteI(list, i)) {
cout << "删除在"<< i <<"处的元素 " << n << " 成功" << endl;
}
else {
cout << "删除失败" << endl;
}
PrintSqList(list); //删除顺序表中指定的元素
cout << "请输入要删除的元素:";
cin >> e;
if (SqListDeleteE(list, e)) {
cout << "删除成功" << endl;
}
else {
cout << "删除失败" << endl;
}
PrintSqList(list); //销毁顺序表
SqListDestory(list); system("pause");
return 0;
}

C/C++ 顺序表的初始化、添加、插入、删除(删除顺序表中指定的所有元素)的更多相关文章

  1. oracle怎样用触发器将一张表的数据添加到另外一张表中

    好吧,我就假设你两个表的数据结构相同吧create table TabA( address varchar2(50), press varchar2(50), city varchar2(50) )/ ...

  2. LeetCode 哈希表 380. 常数时间插入、删除和获取随机元素(设计数据结构 List HashMap底层 时间复杂度)

    比起之前那些问计数哈希表的题目,这道题好像更接近哈希表的底层机制. java中hashmap的实现是通过List<Node>,即链表的list,如果链表过长则换为红黑树,如果容量不足(装填 ...

  3. React---简单实现表单点击提交插入、删除操作

    import React,{Component,Fragment} from 'react' class App extends Component { constructor(){ super() ...

  4. 【原】为DevExpress的ChartControl添加Y轴控制 和 GridControl中指定列添加超级链接

    一.控制ChartControl的Y轴范围 使用Devexpress中的CharControl控件,需要控制AxisY轴的显示范围,需要使用该控件的BoundDataChanged事件,具体代码如下: ...

  5. C 线性表的顺序存储实现及插入、删除等操作示例

    一.线性表的定义 线性表(Linear List)是由同一类型元素构成的有序序列的线性结构.线性表中元素的个数称为线性表的长度:线性表内没有元素(长度为0)时,称为空表:表的起始位置称为表头,表的结束 ...

  6. 《扩展和嵌入python解释器》1.4 模块方法表和初始化函数

    <扩展和嵌入python解释器>1.4 模块方法表和初始化函数   1.4 模块方法表和初始化函数 下面,我演示如何从Python程序调用spam_system().首先,我们需要在’方法 ...

  7. Oracle查询表结果添加到另一张表中

    转自:https://blog.csdn.net/lx870576109/article/details/78336695 把每一个知识点进行积累:Oracle数据库中将查询一张表的结果添加到另一张表 ...

  8. Oracle查询一个表的数据插入到另一个表

    1. 新增一个表,通过另一个表的结构和数据 create table XTHAME.tab1 as select * from DSKNOW.COMBDVERSION 2. 如果表存在: insert ...

  9. Oracle创建删除用户,角色,表空间,导入导出数据库命令总结(转载)

    无意间看到一篇文章,觉得对于ORACLE的新手很实用,特转载,原文出处这里 说明:在创建数据库时输入的密码,是修改系统默认的密码,以system和sysman等系统默认身份登录时要输入的密码就是修改后 ...

  10. sqlserver触发器如何将一个库中的数据插入到另外一个库中

    需求:实现的功能就是,查询当前表的所有信息,插入到另外一个库中(同一台机器,同一个SqlServer) 解决:insert into dB2.dbo.TB2 select * from db1.dbo ...

随机推荐

  1. 封装python代码,避免被轻易反编译

    可使用Cython对python代码进行封装,封装成.pyd库,大致流程可参考: cython打包py成pyd,pyinstaller打包uvicorn服务过程记录_Bolly_He的博客-CSDN博 ...

  2. C# goto 语法

    test: Console.WriteLine("yest"); goto test;

  3. 【转载】ISTQB AL-TA/TTA连载系列06:白盒测试技术的精炼总结

    转载自:https://blog.csdn.net/iteye_13411/article/details/82158591 [概述] 白盒测试,有时候又称为基于结构的测试,特别适用于低级别的测试.根 ...

  4. Pr视频软件主要知识点

    1,选中某一个面板,点击"Tab键上的 '波浪号' 键"即可将这个面板全屏展示  . 2,新建序列项目:自定义,25帧/s,方形像素,无场(逐行扫描). 3,序列面板素材自动缩放适 ...

  5. .NET 7介绍及环境准备

    环境要求 VS2022 17.4+

  6. javaSE-验证码生成

    一.使用Math类的radom() 方法 //生成验证码 String verifcationCode = ""; for (int i = 0; i <= 5; i++) ...

  7. Hashtable多线程遍历问题

    If a thread-safe implementation is not needed, it is recommended to use HashMap in place of code Has ...

  8. 【Java】List

    对List中map集合中某个字段排序 升序排列 方法1 Collections.sort(maps, new Comparator<Map<String, Object>>() ...

  9. Appium自动化测试之键盘操作pressKeyCode()方法(Android特有)

    电话键 KEYCODE_CALL 拨号键 5 KEYCODE_ENDCALL 挂机键 6 KEYCODE_HOME 按键Home 3 KEYCODE_MENU 菜单键 82 KEYCODE_BACK ...

  10. js模块化 CommonJS和AMD/CMD ES6模块化

    ES6之前已经出现了js模块方案,有CommonJS和AMD规范.commonjs实现同步加载应用于服务器,如nodejs.AMD为异步加载应用于浏览器,如requirejs. ES6在语言层面上模块 ...