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++实现静态顺序表的增删查改以及初始化相关推荐

  1. 【线性表】—动态顺序表的增删查改实现

    小菜坤日常上传gitee代码:https://gitee.com/qi-dunyan(所有的原码都放在了我上面的gitee仓库里) 数据结构知识点存放在专栏[数据结构]后续会持续更新 ❤❤❤ 个人简介 ...

  2. 【数据结构】顺序表的增删查改 (C语言实现)

    文章目录 一.线性表 二.顺序表 1.什么是顺序表 2.顺序表的分类 三.动态顺序表的实现 1.结构的定义 2.顺序表的初始化 3.检查容量 4.在头部插入数据 5.在尾部插入数据 6.在指定位置插入 ...

  3. 数据结构C语言实现顺序表——实现增删查改操作完整代码

    #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<asser ...

  4. 顺序表讲解和顺序表实现增删查改

    前言 顺序表是一种参见的数据结构 特点:类似数组的储存,需要预先开辟空间已备数据插入.(1)同时顺序表也因此会存在和数组同样的问题(例如:越界)(2)同时因为其类似与数组的结构给二分查找这种算法提供了 ...

  5. MySQL:带你掌握表的增删查改

    表的增删查改 Create 单行数据 + 全列插入 多行数据 + 指定列插入 插入否则更新 替换 Retrieve SELECT 列 WHERE 条件 结果排序 筛选分页结果 Update Delet ...

  6. MySQL - 对数据表进行“增删查改”的基础操作 - 细节狂魔

    文章目录 前文知识点回顾 正文 :对数据表进行"增删查改"操作 新增操作 - insert 关键字 查找语句(基础操作) - select关键字 - 重点!!!!!!!! 1.最基 ...

  7. 【MySQL】6.0 表的增删查改

    英语单词 Create 创建 Retrieve 读取 Update 更新 Delete 删除 duplicate 复制 updata 更新数据 replace 替换 constraint 限制 cru ...

  8. ASP.NET两个关联的表的增删查改

    两个关联的表的增删查改 主要用了参数 SqlParameter,事务执行多条sql 表Users ID         int Name   varchar 表UsersDetail ID       ...

  9. mysql表的增删查改

    mysql3 表的增删查改 增 创建数据表 单行插入 多行插入 指定列插入 替换 查 select列 全列查询 指定列查询 表达式中可以包含一个字段 给输出的结果重命名 去除重复结果 where条件 ...

最新文章

  1. Excel 如何使某一列的值同时乘以某一个数
  2. ECharts--自定义tooltip属性
  3. css中实现div的显示和隐藏
  4. 【Nutch2.2.1源代码分析之5】索引的基本流程
  5. osgQt::GLWidget的坑
  6. 神经网络(11)--具体实现:unrolling parameters
  7. 活体检测python_活体检测很复杂?仅使用opencv就能实现!(附源码)!
  8. c语言程序中必不可少的,C语言程序设计(第3章程序控制语句)2
  9. Tomcat配置多个Service,多个同名的应用运行在一个tomcat下
  10. 【算法】常见排序算法效率比较和代码
  11. 从数学归纳法到递归算法
  12. MarkDown在线编辑器(支持公众号知乎)
  13. 同心向前,Google Play 十周年啦!
  14. 打造我们自己的数字图书馆
  15. Comparator.comparing排序
  16. 浅谈JAVA中Calendar类FirstDayOfWeek的问题
  17. 二相混合式步进电机开环细分控制simulink仿真模型
  18. 贵州省发票认证系统服务器地址,贵州省增值税发票综合服务平台登录入口:https://fpdk.guizhou.chinatax.gov.cn...
  19. append()、appendChild() 和 innerHTML 的区别
  20. html标签中before,css中before是什么意思?

热门文章

  1. ndk学习6: 使用gdb调试ndk程序一
  2. php导出excel时间错误(同一个时间戳,用date得到不同的时间)
  3. 【随笔】Win7下GVIM的安装与配置
  4. eclipse源服务器未能找到,eclipse - HTTP状态[404]? [未找到](原始服务器未找到当前表示) - 堆栈内存溢出...
  5. html form src,form.html
  6. windows log日志分割_如何将日志记录到 Windows事件日志 中
  7. java 什么是线程同步,java多线程同步集合是什么?并发集合是什么?
  8. java全局变量和局部变量
  9. maven添加子工程_重量级!Maven史上最全教程,看了必懂
  10. Java后端:10w行级别数据的Excel导入优化记录