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 ...
随机推荐
- jQuary学习(一)
一.jQuary简介 jQuery是继prototype之后又一个优秀的Javascript框架.其宗旨是--WRITE LESS,DO MORE,写更少的代码,做更多的事情. jQuery能够使用户 ...
- unity meta pass
简单说就是在meta pass计算 albedo,emission,specular 3个值 光照烘焙,gi计算间接光照时都会用到这些值 Shader "MyShader/SampleLig ...
- centos7 yum安装配置Lnmp和负载配置
首先配置防火墙CentOS 7.0默认使用的是firewall作为防火墙1.关闭firewall: systemctl stop firewalld.service #停止firewallsystem ...
- URL解码和解码
1 String value = "张三"; 2 //对中文进行URL编码 3 value = URLEncoder.encode(value, "UTF-8" ...
- Java数组之三种初始化及内存分析
内存分析 Java内存 堆: 1.存放new的对象和数组 2.可以被所有的线程共享,不会存放别的对象引用 栈: 1.存放基本变量类型(会包含这个基本类型的具体数值) 2.引用对象的变量(会存放这个引用 ...
- ue项目--浏览器出现卡顿及崩溃的原因查找与解决方案
一些内存泄露的情况进行了排查 全局变量 定时器 使用未销毁的全局事件和第三方库 v-if和v-show不合理使用,v-if和v-for不合理使用 使用watch
- iOS 扩展与分类的区别
1.分类 category 分类的作用就是在不修改原有类的基础上,为一个类扩展方法,最主要的是可以给系统类扩展我们自己定义的方法 分类也能使用@property 添加属性 [通过runtime 关联对 ...
- golang json化时允许赋予默认值
演示omitempty 代码: package main import ( "encoding/json" "fmt" ) func main() { type ...
- js apply 与 call
简介 用来调用方法,第一个参数替换掉用方法的this对象 区别:call:A.fn.call(B, arg1,arg2,argn...),后面的参数用逗号分隔 apply:A.fn.apply(B, ...
- 【2020NIO.AC省选模拟#10】C. 寄蒜几盒
题目链接 原题解: 可以发现,假设我们把凸多边形看做障碍,一个点没有被染色当且仅当在它的位置上能看到凸多边形任意两条相对的边中的一条(也就是能看到至少$\dfrac{n}{2}$条边). 对于每个询问 ...