C++实现静态顺序表的增删查改以及初始化
C++实现静态顺序表的增删查改
顺序表:用一段地址连续的存储单元依s次存储数据元素的线性结构,是线性表的一种。
//SeqList.h#pragma once#include <assert.h>
#include <string.h>#define MAX_SIZE 5
typedef int DataType;//定义顺序表结构体
typedef struct SeqList
{DataType array[MAX_SIZE]; //数据块数组size_t size; //当前有效数据个数
}SeqList;//有关顺序表函数的声明
void InitSeqList(SeqList* pSeq);
void PushBack(SeqList* pSeq,DataType x);
void PopBack(SeqList* pSeq);
void PushFront(SeqList* pSeq,DataType x);
void PopFront(SeqList* pSeq);
void PrintSeqList(SeqList* pSeq);
void Insert(SeqList* pSeq, size_t pos, DataType x);
int Find(SeqList* pSeq, DataType x);
void Erase(SeqList* pSeq, size_t pos);
void Remove(SeqList* pSeq, DataType x);
void RemoveAll(SeqList* pSeq, DataType x);//初始化
void InitSeqList(SeqList* pSeq)
{assert(pSeq);memset(pSeq->array, 0, sizeof(DataType)*MAX_SIZE);pSeq->size = 0;
}//尾插
void PushBack(SeqList* pSeq, DataType x)
{assert(pSeq);if (pSeq->size >= MAX_SIZE){cout << "The SeqList is Full!" << endl;return;}pSeq->array[pSeq->size++] = x;
}//尾删
void PopBack(SeqList* pSeq)
{assert(pSeq);if (pSeq->size <= 0){cout << "The SeqList is Empty!" << endl;return;}pSeq->array[--pSeq->size] = 0;
}//头插
void PushFront(SeqList* pSeq, DataType x)
{assert(pSeq);DataType begin = pSeq->size - 1;if (pSeq->size >= MAX_SIZE){cout << "The SeqList is Full!" << endl;return;}for (;begin >= 0;--begin){pSeq->array[begin + 1] = pSeq->array[begin];}pSeq->array[0] = x;++pSeq->size;
}//头删
void PopFront(SeqList* pSeq)
{assert(pSeq);DataType begin = 0;if (pSeq->size <= 0){cout << "The SeqList is Empty!" << endl;return;}for (;begin <= pSeq->size;++begin){pSeq->array[begin] = pSeq->array[begin + 1];}pSeq->array[pSeq->size] = 0;--pSeq->size;
}//打印
void PrintSeqList(SeqList* pSeq)
{assert(pSeq);DataType i = 0;for (;i < pSeq->size;++i){cout << pSeq->array[i]<<" ";}cout << endl;
}//修改某个位置上的数据
void Insert(SeqList* pSeq, size_t pos, DataType x)
{assert(pSeq);DataType begin = pSeq->size;if (pos >= pSeq->size){cout << "The pos is wrong!" << endl;return;}if (pSeq->size >= MAX_SIZE){cout << "The SeqList is Full!" << endl;return;}for (;begin >= pos;--begin){pSeq->array[begin] = pSeq->array[begin - 1];}pSeq->array[pos - 1] = x;++pSeq->size;
}//查找
int Find(SeqList* pSeq, DataType x)
{assert(pSeq);int i = 0;for (;i < pSeq->size;++i){if (pSeq->array[i] == x){return i;}}return -1; //表示没有找到x
}//删除某个位置上的数据
void Erase(SeqList* pSeq, size_t pos)
{assert(pSeq);//DataType begin = pSeq->size -1;if (pos >= pSeq->size){cout << "The pos is wrong!" << endl;return;}if (pSeq->size <= 0){cout << "The SeqList is Empty!" << endl;return;}for (;pos < pSeq->size;++pos){pSeq->array[pos] = pSeq->array[pos + 1];}--pSeq->size;
}//删除顺序表中第一个值为X的数据
void Remove(SeqList* pSeq, DataType x)
{assert(pSeq);int pos = 0;pos = Find(pSeq, x);if (pos != -1){Erase(pSeq, pos);}
}//删除顺序表中所有值为X的数据
void RemoveAll(SeqList* pSeq, DataType x)
{assert(pSeq);int pos = 0;pos = Find(pSeq, x);while (pos != -1){Erase(pSeq, pos);pos = Find(pSeq, x);}
}//Test.cpp #define _CRT_SECURE_NO_WARNINGS 1#include <iostream>
using namespace std;#include "SeqList.h"//测试尾插
void Test1()
{SeqList seq;InitSeqList(&seq);PushBack(&seq, 1);PushBack(&seq, 2);PushBack(&seq, 3);PushBack(&seq, 4);PushBack(&seq, 5);PushBack(&seq, 6);PrintSeqList(&seq);
}//测试头插头删
void Test2()
{SeqList seq;InitSeqList(&seq);PushBack(&seq, 1);PushBack(&seq, 2);PushBack(&seq, 3);PushBack(&seq, 4);PushFront(&seq, 0);PushFront(&seq, -1);PrintSeqList(&seq);PopBack(&seq);PopBack(&seq);PopBack(&seq);PopBack(&seq);PopBack(&seq);PopBack(&seq);PrintSeqList(&seq);
}//测试修改某个位置上的数据
void Test3()
{SeqList seq;InitSeqList(&seq);PushBack(&seq, 1);PushBack(&seq, 2);PushBack(&seq, 4);PushBack(&seq, 5);Insert(&seq, 3, 3);PrintSeqList(&seq);
}//测试查找和删除
void Test4()
{SeqList seq;InitSeqList(&seq);PushBack(&seq, 1);PushBack(&seq, 2);PushBack(&seq, 3);PushBack(&seq, 4);PrintSeqList(&seq);int ret = Find(&seq, 2);cout << "pos:" << ret << endl;Erase(&seq, 3);PrintSeqList(&seq);
}//测试删除顺序表中第一个值为x的数据
void Test5()
{SeqList seq;InitSeqList(&seq);PushBack(&seq, 1);PushBack(&seq, 2);PushBack(&seq, 3);PushBack(&seq, 4);PrintSeqList(&seq);Remove(&seq, 2);PrintSeqList(&seq);
}int main()
{//Test1();//Test2();//Test3();//Test4();Test5();system("pause");return 0;
}
有问题的地方还请多多指教
转载于:https://blog.51cto.com/clown5/1753486
C++实现静态顺序表的增删查改以及初始化相关推荐
- 【线性表】—动态顺序表的增删查改实现
小菜坤日常上传gitee代码:https://gitee.com/qi-dunyan(所有的原码都放在了我上面的gitee仓库里) 数据结构知识点存放在专栏[数据结构]后续会持续更新 ❤❤❤ 个人简介 ...
- 【数据结构】顺序表的增删查改 (C语言实现)
文章目录 一.线性表 二.顺序表 1.什么是顺序表 2.顺序表的分类 三.动态顺序表的实现 1.结构的定义 2.顺序表的初始化 3.检查容量 4.在头部插入数据 5.在尾部插入数据 6.在指定位置插入 ...
- 数据结构C语言实现顺序表——实现增删查改操作完整代码
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<asser ...
- 顺序表讲解和顺序表实现增删查改
前言 顺序表是一种参见的数据结构 特点:类似数组的储存,需要预先开辟空间已备数据插入.(1)同时顺序表也因此会存在和数组同样的问题(例如:越界)(2)同时因为其类似与数组的结构给二分查找这种算法提供了 ...
- MySQL:带你掌握表的增删查改
表的增删查改 Create 单行数据 + 全列插入 多行数据 + 指定列插入 插入否则更新 替换 Retrieve SELECT 列 WHERE 条件 结果排序 筛选分页结果 Update Delet ...
- MySQL - 对数据表进行“增删查改”的基础操作 - 细节狂魔
文章目录 前文知识点回顾 正文 :对数据表进行"增删查改"操作 新增操作 - insert 关键字 查找语句(基础操作) - select关键字 - 重点!!!!!!!! 1.最基 ...
- 【MySQL】6.0 表的增删查改
英语单词 Create 创建 Retrieve 读取 Update 更新 Delete 删除 duplicate 复制 updata 更新数据 replace 替换 constraint 限制 cru ...
- ASP.NET两个关联的表的增删查改
两个关联的表的增删查改 主要用了参数 SqlParameter,事务执行多条sql 表Users ID int Name varchar 表UsersDetail ID ...
- mysql表的增删查改
mysql3 表的增删查改 增 创建数据表 单行插入 多行插入 指定列插入 替换 查 select列 全列查询 指定列查询 表达式中可以包含一个字段 给输出的结果重命名 去除重复结果 where条件 ...
最新文章
- Excel 如何使某一列的值同时乘以某一个数
- ECharts--自定义tooltip属性
- css中实现div的显示和隐藏
- 【Nutch2.2.1源代码分析之5】索引的基本流程
- osgQt::GLWidget的坑
- 神经网络(11)--具体实现:unrolling parameters
- 活体检测python_活体检测很复杂?仅使用opencv就能实现!(附源码)!
- c语言程序中必不可少的,C语言程序设计(第3章程序控制语句)2
- Tomcat配置多个Service,多个同名的应用运行在一个tomcat下
- 【算法】常见排序算法效率比较和代码
- 从数学归纳法到递归算法
- MarkDown在线编辑器(支持公众号知乎)
- 同心向前,Google Play 十周年啦!
- 打造我们自己的数字图书馆
- Comparator.comparing排序
- 浅谈JAVA中Calendar类FirstDayOfWeek的问题
- 二相混合式步进电机开环细分控制simulink仿真模型
- 贵州省发票认证系统服务器地址,贵州省增值税发票综合服务平台登录入口:https://fpdk.guizhou.chinatax.gov.cn...
- append()、appendChild() 和 innerHTML 的区别
- html标签中before,css中before是什么意思?
热门文章
- ndk学习6: 使用gdb调试ndk程序一
- php导出excel时间错误(同一个时间戳,用date得到不同的时间)
- 【随笔】Win7下GVIM的安装与配置
- eclipse源服务器未能找到,eclipse - HTTP状态[404]? [未找到](原始服务器未找到当前表示) - 堆栈内存溢出...
- html form src,form.html
- windows log日志分割_如何将日志记录到 Windows事件日志 中
- java 什么是线程同步,java多线程同步集合是什么?并发集合是什么?
- java全局变量和局部变量
- maven添加子工程_重量级!Maven史上最全教程,看了必懂
- Java后端:10w行级别数据的Excel导入优化记录