用C++结构体实现顺序表的诸多功能

编译运行环境为visual studio 2017 for community

#include <iostream>

#include<stdlib.h>

#define maxsize 100

#define ok 0

typedef int elemtype;

typedef int status;

using namespace std;

struct slist

{

elemtype *elem = NULL;

int length;

};

void create(slist&q)//顺序表的初始化,构造一个空的顺序表L

{

q.elem = new int[maxsize];//为顺序表分配一个大小为maxsize的数组空间

q.length = 0;

if (q.elem != NULL) //存储分配成功

cout << "success" << endl;

else//存储分配失败

cout << "faild" << endl;

}

status deleteall(slist &q)

{

delete[]q.elem;//释放分配空间

return ok;

}

void input(slist &q)//输入数据

{

int a, b;

cout << "需要输入的数据个数" << endl;

cin >> a;

cout << "输入数据"<<endl;

for (int i = 0; i < a; i++)

{

cin >> b;

q.elem[i] = b;

q.length++;

}

cout << "数据已输入" << endl;

}

status searchnumber(slist q, int v)//查找数据

{

cout << "所查元素的值为" << q.elem[v - 1] << endl;

return ok;

}

status searchdata(slist q, int v)//查找序号

{

int i = 0;

for (; i < q.length; i++)

{

if (q.elem[i] == v)

{

cout << "查找数据序号:" << i + 1 << endl;

break;

}

}

return ok;

}

status insert(slist &q, int n, int data)//插入数据

{

if (n < q.length)

{

for (int i = q.length; i > n-1; i--)

{

q.elem[i] = q.elem[i-1];

}

q.elem[n-1] = data;

}

else

{

q.elem[q.length] = data;

}

q.length++;

cout << "插入数据成功" << endl;

return ok;

}

status deleteone(slist& q, int numb2)

{

if (numb2 > q.length)

{

cout << "删除值不合法" << endl;

}

else

{

int t, i;

for (i = numb2-1; i < q.length-1; i++)

{

q.elem[i] = q.elem[i + 1];

}

q.length--;

cout << "删除成功" << endl;

}

return ok;

}

void coutfunction(slist q)

{

cout << "顺序表数据如下" << endl;

for (int i = 0; i < q.length; i++)

{

cout << q.elem[i] << endl;

}

}

int main()

{

slist q;

cout << "1. 建立顺序表\n";

cout << "2. 输入数据\n";

cout << "3. 查找\n";

cout << "4. 插入\n";

cout << "5. 删除\n";

cout << "6. 输出数据\n";

cout << "0. 退出\n\n";

int choose = 9, numb, data, need1, need2, numb1, numb2,numb0, data1;

while (choose != 0)

{

cin >> choose;

switch (choose)

{

case 0:

break;

case 1:

create(q);

break;

case 2:

input(q);

break;

case 3:

cout << "查找序号按 1,查找数值按 2" << endl;

cin >> numb;

if (numb == 1)

{

cin >> numb0;

need1 = searchnumber(q, numb0);

}

else

{

cin >> numb0;

need2 = searchdata(q, numb0);

}

break;

case 4:

cout << "输入插入的序号和数值" << endl;

cin >> numb1 >> data1;

insert(q, numb1, data1);

break;

case 5:

cout << "输入删除的序号" << endl;

cin >> numb2;

deleteone(q, numb2);

break;

case 6:

cout << "当前顺序表为:\n";

coutfunction(q);

break;

}

}

return 0;

system("pause");

}

原文地址:https://www.cnblogs.com/wwywy/p/10568931.html

时间: 2024-11-29 11:27:47

用C++结构体实现顺序表的诸多功能的相关文章

【数据结构】顺序表和链表

一.顺序表 顺序表定义 :顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素.使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表.顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中. 顺序表可以分为静态顺序表和动态顺序表,静态较为简单,本文提供全部动态顺序表基本操作的代码. 顺序表的基本操作:

C++线性表通过结构体实现操作和结构体字符串快速排序和shell排序结合

#include<iostream> #include<string> #define ml 10 using namespace std; typedef struct{//定义Data数据项 std::string name; long num; }Data; struct Link{//定义结构体 Data data[ml+1]; int length; }L; void initLink(Link *p){//初始化,即便有数据可以覆盖写入增加效率 p->length

[转载(有删改)] 顺序表

申明:转自    http://www.cnblogs.com/Romi/archive/2012/01/07/2315788.html 一个线性表是n个数据元素的有限序列,线性结构的顺序表示指的是用一组地址连续的存储单元一次存储线性表的数据元素,以元素在计算机内"物理位置相邻"来表示线性表中数据元素之间的逻辑关系. 线性表的顺序存储结构是一种随机存取的存储结构,通常用数组来描述数据结构中的顺序存储结构. 以下将从(顺序表构造——顺序表初始化——插入元素——删除元素——元素比较——两个

C语言实现顺序表

顺序表是C语言中一种基本的结构,可以存储各种基本类型的数据,而且不但可以存储基本类型的数据,也可以存储一种结构.所以顺序表是一种在学C的过程中必须掌握的结构,通过学习整理,下面来实现一下: 首先,先要想好用什么实现,一般实现最基本的顺序表的话直接用数组实现,我们在这用一个结构体来封装这个顺序表(封装这一概念是在C++中最常用的概念) #define ARRAY_EMPTY -2 #define ARRAY_FULL -1 #define MAX_SIZE 10000 typedef int Da

深入理解C指针之六:指针和结构体

C的结构体可以用来表示数据结构的元素,比如链表的节点,指针是把这些元素连接到一起的纽带. 结构体增强了数组等集合的实用性,每个结构体可以包含多个字段.如果不用结构体,可能要分别为每个字段声明一个数组,使用结构体,可以声明一个结构体的数组来组合这些字段. 结构体基础 声明结构体的方式有很多种,这里先讨论两种: //第一种声明方式 struct person{ char* firstname; char* secondname; char* title; unsigned int age; }; /

c语言实现顺序表的基本操作

转自 https://www.cnblogs.com/rookiefly/p/3425075.html 原作者:Step by Step 经过三天的时间终于把顺序表的操作实现搞定了.(主要是在测试部分停留了太长时间) 1;线性表顺序存储的概念:指的是在内存中用一段地址连续的存储单元依次存储线性表中的元素. 2;采用的实现方式:一段地址连续的存储单元可以用固定数组或者动态存储结构来实现,这里采用动态分配存储结构. 3;顺序表的定义及操作集合:头文件为defs.h 1 #ifndef _DEFS_H

结构体学习心得

结构体 1.简单认识结构体 #include<stdio.h> /*struct tag(member list)(varible list)*/ 成员列表     变量列表 struct stu { char name[20]; int age; char sex[5]; char tele[12]; char addr[30]; }; int main() { struct stu stu2; struct stu arr[10]; return 0; } 2.结构体的重命名 ①.type

Swift入门篇-结构体

前面主要是介绍swift语言中基本类型的用法,今天给大家介绍的是swift的结构体的用法,swift中结构体的用法和其他语言的用法,还有不太一样,不过您多敲几遍,就可以理解结构体,结构体在ios开发中是灰常重要的一部分,如果您很好的掌握结构体,在后面ios开发中,会理解的更加清楚. 一:结构体声明 格式: struct 结构体名 { } 说明: 1: struct 是定义结构体的关键字 例子 /* 1:struct 是结构体的关键字 2:student 结构体名称 3:student() 创建一

C程序范例(3)——结构体

一.结构体类型定义. 结构体类型和数组类型一样,需要由程序员定义,必须限定以后使用. struct 类型标识符 { 类型名 成员名; 类型名 成员名; ... }; 其中,struct 是结构体类型定义的关键字,他与其后用户指定的类型标识符共同组成结构体类型名.例如学生结构体类型定义如下: struct st_type { char num[7]; char name[20]; char sex; int age; float score; char address[30]; }; 说明:(1)