C/C++ 顺序表的初始化、添加、插入、删除(删除顺序表中指定的所有元素)
#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++ 顺序表的初始化、添加、插入、删除(删除顺序表中指定的所有元素)的更多相关文章
- oracle怎样用触发器将一张表的数据添加到另外一张表中
好吧,我就假设你两个表的数据结构相同吧create table TabA( address varchar2(50), press varchar2(50), city varchar2(50) )/ ...
- LeetCode 哈希表 380. 常数时间插入、删除和获取随机元素(设计数据结构 List HashMap底层 时间复杂度)
比起之前那些问计数哈希表的题目,这道题好像更接近哈希表的底层机制. java中hashmap的实现是通过List<Node>,即链表的list,如果链表过长则换为红黑树,如果容量不足(装填 ...
- React---简单实现表单点击提交插入、删除操作
import React,{Component,Fragment} from 'react' class App extends Component { constructor(){ super() ...
- 【原】为DevExpress的ChartControl添加Y轴控制 和 GridControl中指定列添加超级链接
一.控制ChartControl的Y轴范围 使用Devexpress中的CharControl控件,需要控制AxisY轴的显示范围,需要使用该控件的BoundDataChanged事件,具体代码如下: ...
- C 线性表的顺序存储实现及插入、删除等操作示例
一.线性表的定义 线性表(Linear List)是由同一类型元素构成的有序序列的线性结构.线性表中元素的个数称为线性表的长度:线性表内没有元素(长度为0)时,称为空表:表的起始位置称为表头,表的结束 ...
- 《扩展和嵌入python解释器》1.4 模块方法表和初始化函数
<扩展和嵌入python解释器>1.4 模块方法表和初始化函数 1.4 模块方法表和初始化函数 下面,我演示如何从Python程序调用spam_system().首先,我们需要在’方法 ...
- Oracle查询表结果添加到另一张表中
转自:https://blog.csdn.net/lx870576109/article/details/78336695 把每一个知识点进行积累:Oracle数据库中将查询一张表的结果添加到另一张表 ...
- Oracle查询一个表的数据插入到另一个表
1. 新增一个表,通过另一个表的结构和数据 create table XTHAME.tab1 as select * from DSKNOW.COMBDVERSION 2. 如果表存在: insert ...
- Oracle创建删除用户,角色,表空间,导入导出数据库命令总结(转载)
无意间看到一篇文章,觉得对于ORACLE的新手很实用,特转载,原文出处这里 说明:在创建数据库时输入的密码,是修改系统默认的密码,以system和sysman等系统默认身份登录时要输入的密码就是修改后 ...
- sqlserver触发器如何将一个库中的数据插入到另外一个库中
需求:实现的功能就是,查询当前表的所有信息,插入到另外一个库中(同一台机器,同一个SqlServer) 解决:insert into dB2.dbo.TB2 select * from db1.dbo ...
随机推荐
- CF850F 题解
题意 传送门 有一袋 \(n\) 个颜色球,第 \(i\) 个颜色的球有 \(a_i\) 个. 当袋子里至少有两个不同颜色的球时,执行以下步骤: 一个接一个的按照顺序随机取出两个的球,这些球的颜色可能 ...
- Hbase 报错hbase Could not start zk requested port of 2181
windows下面 解决: 1. conf/hbase-env.cmd set HBASE_MANAGES_ZK=false 2. 先启动Hbase start-Hbase.cmd 再启动 zoo ...
- 国行XBoxOne第一次开机配置主要问题备忘
1,Kinect可以在设置中关闭. 2,彻底关闭主机,需要长按主机上的开关键,将主机彻底关机,同时开机只要轻触一下主机开关机键即可 3,不能更新问题:3.1检查网络已连接3.2检查路由器,将DNS中的 ...
- 杭电oj 水仙花数
Problem Description 春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:"水仙花数"是指一个三位数,它的各位数字的立方和等于其本身 ...
- 利用matlab求解函数微分
利用matlab解决求解函数微分 matlab,微分 1. 问题提出 最近在复习高等数学,感觉可以结合 去理解他. 遇到了一个题目: 2. 具体代码 %{ 解决函数微分问题 %} clc; clear ...
- 解决tomcat8080端口占用问题
解决tomcat8080端口占用问题 1. 使用管理员权限打开cmd 2. 输入 netstat -ano | findstr 8080 找出占用8080端口的进程pid netstat -ano | ...
- Linux 使用vsftpd服务传输文件
文件传输协议 FTP是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20.21号端口,其中端口20(数据端口)用于进行数据传输,端口21(命令端口)用于接受客户端发出的相关FTP命 ...
- python + uiautomator2 常用公共方法封装
前言 由于公司UI自动化框架底层用的是Uiautomator2,所以我就用Uiautomator2搭了一套UI自动化框架,思路其实和Appnium一样的. uiautomator2是一个自动化测试开源 ...
- TensorFlow架构
Tensorflow基本信息 Tensorflow所需处理器 CPU,GPU,TPU(Google为AI研发的专用芯片) 平台 Windows,Linux,Android,iOS,Raspberry ...
- Idea提交文件时,添加不需要提交的文件至.gitignore文件中
1.在Idea中,依次打开File ---->Setting ---> Editor --->File Types 2.在当前编辑栏下方找到Ignore files and fold ...