首页 > 编程语言 >数据结构(C++版)——顺序表

数据结构(C++版)——顺序表

时间:2024-08-16 18:52:25浏览次数:9  
标签:顺序 return 线性表 int elem C++ length SqList 数据结构

一、顺序表有关的基本操作

1、InitList(&L):初始化线性表,构造一个空的线性表L

2、DestroyList(&L):销毁线性表L

3、ClearList(&L):将线性表L重置为空表

4、ListEmpty(L):若L为空表,则返回TURE,否则返回FALSE

5、GetElem(L,i,&e):用e返回L中第i个数据元素的值

6、LocateElem(L,e):在线性表中查找与指定值相同的数据元素的位置,找到返回该元素的位置序号,未找到返回FALSE

7、ListInsert(&L,i,e):在L中第i个位置前插入新的数据元素e,L的长度加1

8、ListDelete(&L,i,&e):删除L的第i个元素,并用e返回其值,L的长度减1

二、代码实现

顺序表动态存储结构定义:

#define LIST_INIT_SIZE  100   //线性表存储空间的初始分配量
#define LISTINCREMENT   10    //线性表存储空间的分配增量
typedef  struct{
       ElemType  *elem; //存储空间基址
       int length;      //当前存储元素个数
       int listsize;    //当前分配的存储容量(以sizeof(ElemType)为单位)
}SqList;

1、InitList(&L):初始化线性表,构造一个空的线性表L

int InitList(SqList& L){
	L.elem = new ElemType(LIST_INIT_SIZE );
	if (!L.elem) exit(OVERFLOW);//存储分配失败
	L.length = 0;
	L.listsize = LIST_INIT_SIZE;
	return OK;
}

  2、DestroyList(&L):销毁线性表L

void DestroyList(SqList& L){
	if (L.elem) 
         delete L.elem;
}

3、ClearList(&L):将线性表L重置为空表

void ClearList(SqList& L){
	L.length = 0;
}

4、ListEmpty(L):若L为空表,则返回TURE,否则返回FALSE

int ListEmpty(SqList L){
	if (L.length==0)   return TRUE;
	else return FALSE;
}

5、GetElem(L,i,&e):用e返回L中第i个数据元素的值

int GetElem(SqList L, int i, ElemType& e){
	if (i<1 || i>L.length)   return ERROR;  
	e = L.elem[i - 1];
	return OK;
}

6、LocateElem(L,e):在线性表中查找与指定值相同的数据元素的位置,找到返回该元素的位置序号,未找到返回FALSE

int LocateElem(SqList L, ElemType e){
	for (int i = 0; i < L.length; i++){
		if (L.elem[i] == e)   return i + 1;
	}
	return FALSE;
    //或用while
	/*int i = 0;
	while (i < L.length && L.elem[i] != e)  i++;
	if (i < L.length)  return i + 1;
	else return FALSE;*/
}

时间复杂度:O(n)

7、ListInsert(&L,i,e):在L中第i个位置前插入新的数据元素e,L的长度加1

int ListInsert(SqList& L, int i, ElemType e)  //i是插入线性表的位置,不是下标
{
	if (i<1 || i>L.length + 1) return ERROR;
    if (L.length == L.listsize)  return ERROR;  //存储空间已满,返回ERROR
	for (int j = L.length - 1; j >= i - 1; j--)
	{
		L.elem[j + 1] = L.elem[j];    //插入位置及以后的元素后移
	}
	L.elem[i - 1] = e;
	L.length++;
	return OK;
}

时间复杂度:O(n)

8、ListDelete(&L,i,&e):删除L的第i个元素,并用e返回其值,L的长度减1

int ListDelete(SqList& L, int i, ElemType& e) {
	if (i<1 || i>L.length)   return ERROR;  //i值不合法
	e = L.elem[i - 1];
	for (int j = i; j <= L.length - 1; j++) {
		L.elem[j - 1] = L.elem[j];     //被删除元素之后的前移
	}
	L.length--;
	return OK;
}

时间复杂度O(n)

标签:顺序,return,线性表,int,elem,C++,length,SqList,数据结构
From: https://blog.csdn.net/2401_83190311/article/details/141108119

相关文章

  • C++八股文——内存管理(堆和栈的区别? C++内存分区? 内存泄漏?如何避免?什么是智能指针?有哪
    文章目录C++内存管理堆和栈的区别C++内存分区内存泄漏?如何避免?1、什么是内存泄露?2、内存泄漏的分类3、什么操作会导致内存泄露?4、如何防⽌内存泄露?5、智能指针有了解哪些?6、构造函数,析构函数要设为虚函数吗,为什么?什么是智能指针?有哪些种类?new和malloc有什么区别?d......
  • C++智能指针讨论
    一段有问题的代码。#include<iostream>intmain(){for(inti=0;i<10000000;i++){double*p=newdouble(1);}return0;}这里就有了内存泄漏。修改为下边的代码,是可以的,但是会比较占用CPU资源。#include<iostream>intmain()......
  • C++速览之智能指针
    1、存在的问题c++把内存的控制权对程序员开放,让程序显式的控制内存,这样能够快速的定位到占用的内存,完成释放的工作。但是此举经常会引发一些问题,比如忘记释放内存。由于内存没有得到及时的回收、重复利用,所以在一些c++程序中,常会遇到程序突然退出、占用内存越来越多,最后不......
  • C++ Debug
    如果右上角没有runanddebugbutton记得把setting里IntelliSenseEngine改成default,以及DebugShortcut打开如果cpp文件提示headernotfound,那需要在c_cpp_properties.json中把compilerPath,添加上debug的时候,默认他好像是会自动build的,当然也可以自己写p......
  • C++构造和析构
    文章目录一、构造函数1、构造函数的功能2、构造函数的创建3、默认构造函数二、析构函数1、析构函数的功能2、析构函数的的创建三、拷贝构造函数1、拷贝构造的功能2、拷贝构造的创建3、深拷贝一、构造函数1、构造函数的功能构造函数是一个类的成员函数,在类创......
  • C++图像识别、图像识别接口、ocr api
    如果您在找工作并且在找内容审核编辑的工作,那么不难发现,快手在全国多个招聘网站发布了关于“内容审核编辑”岗位的招聘信息,据悉,此次的“内容审核编辑”岗位招聘的规模达3000人。因为快手上面“低龄妈妈”内容的炒作,所以被要求整改,才有后续的大规模招聘内容审核编辑人员的现象......
  • 【C++的剃刀】我不允许你还不会map和set
     ​ 学习编程就得循环渐进,扎实基础,勿在浮沙筑高台   循环渐进Forward-CSDN博客Hello,这里是kiki,今天继续更新C++部分,我们继续来扩充我们的知识面,我希望能努力把抽象繁多的知识讲的生动又通俗易懂,今天要讲的是C++的map和set~目录 循环渐进Forward-CSDN博客关......
  • C/C++算法概述
    摘要1.性能优势:C/C++语言以其接近硬件的特性而著称,提供了对底层硬件的直接控制能力。这意味着算法可以实现更高的执行效率,特别是在需要处理大量数据或实时性能要求较高的场景中。2.灵活性:C/C++提供了丰富的数据结构和操作,允许开发者以灵活的方式实现复杂的算法。同时,C++的......
  • 红温刷算法题(C/C++)
    此文章主要是给刷算法题的小萌新写的题解,博主每日刷题,把所刷的题以及所获都会发到博客里面,文章有详解思路,并且有对应的AC代码,希望我的博客对算法小萌新有所帮助。感谢CSDN平台给我这个机会,我会努力创作,创作高质量文章。 P1002[NOIP2002普及组]过河卒题目描述棋盘上 A ......
  • C++基础资料二
    C++等级考试资料二考试内容:选择题:进制转换、冒泡与选择排序、二分思想、链表与顺序表、二维数组初始化、函数阅读编程题:字符串操作、质数判断、排序、最小公倍数、最大公约数、百钱百鸡问题 考试资料:进制转换公式1.十进制转二进制整数部分:不断将十进制数除以2,记录余......