20003.数据结构C++ 顺序表

简介: 20003.数据结构C++ 顺序表
#include<iostream>
#define MaxSize 20
typedef int ElemType;
typedef struct {
  ElemType *elem;
  int length;
}SqList;
bool InitList(SqList& L) {
  /*
    初始化顺序表,分配空间。
  */
  L.elem = new int [MaxSize];
  if (!L.elem)
    return false;
  L.length = 0;
  return true;
}
bool CreateList(SqList& L) {
  /*
    插入数据构建顺序表
  */
  int x = 0, i = 0;
  while (x != -1){
    if (L.length == MaxSize) {
      std::cout  << "顺序表已经满了" << std::endl;
      return false;
    }
    std::cout << "请输入插入的元素" << std::endl;
    std::cin >> x;
    L.elem[i++] = x;
    L.length ++;
  }
  return true;
}
bool PrintList(SqList L) {
  /*
    打印顺序表中的内容。
  */
  if (L.length == 0)
    return false;
  for (int i = 0; i < L.length; i++) {
    std::cout << L.elem[i] << std::endl;
  }
  return true;
}
bool GetElem(SqList L, int i, int& e) {
  // 从列表中取第i个值,并且返回到e中
  if (i<1 || i>L.length) {
    return false;
  }
  e = L.elem[i - 1];
  return true;
}
int LocateElem(SqList L, int e) {
  /*
    输入需要查找的元素,返回该元素所在的索引值。
  */
  if (!L.elem)
    return false;
  for (int i = 1; i < L.length; i++)
    if (L.elem[i] == e)
      return i + 1;
  return -1;
}
bool ListInsert_Sq(SqList& L, int i, int e) {
  /*
    向顺序表中插入一个值。
  */
  if (L.length == MaxSize)
    return false;
  for (int j = L.length; j > i; j--)
    L.elem[j] = L.elem[j - 1];
  L.elem[i] = e;
  L.length++;
  return true;
}
bool ListDelete_Sq(SqList& L, int i, int& e) {
  /*
    从顺序表中删除一个值。
  */
  if (i<1 || i >L.length)
    return false;
  e = L.elem[i];
  for (int j = i; j < L.length; j++)
    L.elem[j] = L.elem[j + 1];
  L.length--;
  return true;
}
int main() {
  SqList L;
  // 初始化顺序表
  InitList(L);
  // 创建顺序表
  CreateList(L);
  // 打印顺序表
  PrintList(L);
  // 从表中取数
  int number;
  int e;
  std::cout << "输入您要查找的序号" << std::endl;
  std::cin >> number;
  GetElem(L, number, e);
  std::cout << e << std::endl;
  // 从顺序表中查找
  int index;
  int FindNumber;
  std::cout << "输入要查找的元素" << std::endl;
  std::cin >> FindNumber;
  index = LocateElem(L, FindNumber);
  if (index == -1)
    std::cout << "该顺序表中没有改元素" << std::endl;
  std::cout << index << std::endl;
  // 从顺序表中插入元素
  int InsertIndex;
  int InsertElem;
  std::cout << "请输入您要插入的元素的位置" << std::endl;
  std::cin >> InsertIndex;
  std::cout << "请输入您要出入的元素" << std::endl;
  std::cin >> InsertElem;
  ListInsert_Sq(L, InsertIndex, InsertElem);
  PrintList(L);
  // 从顺序表中删除一个元素
  int DeleteIndex;
  int DeleteElem;
  std::cout << "请输入您要删除元素的索引" << std::endl;
  std::cin >> DeleteIndex;
  DeleteElem = ListDelete_Sq(L, DeleteIndex, DeleteElem);
  std::cout << "删除的元素是" << DeleteElem << std::endl;
  return true;
}
目录
相关文章
|
2月前
|
存储 编译器 C语言
数据结构-顺序表详解(看这篇就足够了,哈哈哈)
数据结构-顺序表详解(看这篇就足够了,哈哈哈)
61 2
|
1月前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之顺序表【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找等具体详解步骤以及举例说明
|
1月前
|
存储 C语言
【数据结构】顺序表(c语言实现)(附源码)
本文介绍了线性表和顺序表的基本概念及其实现。线性表是一种有限序列,常见的线性表有顺序表、链表、栈、队列等。顺序表是一种基于连续内存地址存储数据的数据结构,其底层逻辑是数组。文章详细讲解了静态顺序表和动态顺序表的区别,并重点介绍了动态顺序表的实现,包括初始化、销毁、打印、增删查改等操作。最后,文章总结了顺序表的时间复杂度和局限性,并预告了后续关于链表的内容。
76 3
|
1月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之顺序表习题精讲【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找习题精讲等具体详解步骤以及举例说明
|
2月前
|
存储 Java
数据结构第二篇【关于java线性表(顺序表)的基本操作】
数据结构第二篇【关于java线性表(顺序表)的基本操作】
40 6
|
2月前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
27 3
|
2月前
|
存储 C语言
探索C语言数据结构:利用顺序表完成通讯录的实现
本文介绍了如何使用C语言中的顺序表数据结构实现一个简单的通讯录,包括初始化、添加、删除、查找和保存联系人信息的操作,以及自定义结构体用于存储联系人详细信息。
36 2
|
2月前
|
存储
【数据结构】线性表和顺序表
【数据结构】线性表和顺序表
25 1
|
2月前
|
存储 算法 索引
【数据结构】——顺序表
【数据结构】——顺序表
|
2月前
|
存储
数据结构1——顺序表
数据结构1——顺序表
20 1