数据结构顺序表实现

数据结构之顺序表

前言

最近在做一些考研题目,发现有些同学不会去实现数据结构的代码,我就将李春葆老师的数据结构第5版中的算法实现了一些基础的功能给同学们参考,大家可以在此基础上实现新的功能并验证,代码可以直接运行,编译器我用的是dev C++.

顺序表基本算法实现

//参考书籍:李春葆数据结构教程第5版 
#include<iostream>
#include<cstdlib> 
using namespace std; 
#define MaxSize 50
typedef int ElemType; 
typedef struct
{
	ElemType data[MaxSize];
	int length;		
}SqList;//结构体定义 
void CreateList(SqList *&L,ElemType a[],int n)//创建顺序表 
{
	int i=0,k=0;
	L=(SqList*)malloc(sizeof(SqList));
	while(i<n)
	{
		L->data[i]=a[i];
		k++;
		i++;
	}
	L->length=k;
}
void InitList(SqList *&L)//初始化顺序表 
{
	L=(SqList*)malloc(sizeof(SqList));
	L->length=0;
}
void DestroyList(SqList *&L)//销毁顺序表 
{
	free(L);
}
bool ListEmpty(SqList *L)//判空 
{
	return (L->length==0);
}
int ListLength(SqList *L)//返回长度 
{
	return L->length;
} 
void DispList(SqList *L)//输出线性表 
{
	for(int i=0;i<L->length;i++)
	{
		printf("%d ",L->data[i]);
	}
	printf("\n");
}
bool GetElem(SqList *L,int i,ElemType &e)//求线性表中第i个位置的元素值 
{
	if(i<1||i>L->length) return false;
	e=L->data[i-1];
	return true;
} 
int LocateElem(SqList *L,ElemType e)//定位e的位置 
{
	int i=0;
	while(i<L->length&&L->data[i]!=e) i++;
	if(i>=L->length) return false;
	else return i+1;//物理位序转化为逻辑位序 
}
bool ListInsert(SqList *&L,int i,ElemType e)//在第i个位置插入元素e 
{
	int j;
	if(i<1||i>L->length+1) return false;
	i--;//物理位序转化为逻辑位序 
	for(j=L->length;j>i;j--)//整体后移 
	{
		L->data[j]=L->data[j-1];
	}
	L->data[i]=e;
	L->length++;
	return true;
}
bool ListDelete(SqList *&L,int i,ElemType &e)//删除第i个元素 
{
	int j;
	if(i<1||i>L->length) return false;
	i--;
	e=L->data[i];
	for(j=i;j<L->length;j++)
	{
		L->data[j]=L->data[j+1];
	}	 
	L->length--;
	return true;
} 
int main()
{
	SqList *L;
	ElemType e;
	int a[]={1,2,3,4,5};
	InitList(L);
	CreateList(L,a,5);
	DispList(L);
	ListEmpty(L)==0?cout<<"not null"<<endl:cout<<"null"<<endl;
	cout<<ListLength(L)<<endl;
	GetElem(L,3,e);
	cout<<e<<endl;
	cout<<LocateElem(L,3)<<endl;
	ListInsert(L,6,6);
	DispList(L);
	ListDelete(L,3,e);
	DispList(L);
	DestroyList(L); 
	return 0;
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用c++实现顺序表:多文件编程,层次清晰,函数有注释 SeqList();//构造函数,存储的元素个数设为0 bool setLength(size_t length);//设置已经存储的元素个数 bool addElement(ElemType element);//把某个元素添加到顺序表末尾 bool addElement(ElemType element , size_t n);//插入一个元素,使其成为第n个元素,其余元素后移 bool delElement();//删除所有的元素 bool delElement(size_t n);//删除第n个元素 bool delElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,把这个元素删除 bool replaceElement(ElemType element , size_t n);//使用一个元素,替换掉第n个元素 bool swapElement(size_t n1 , size_t n2);//把第n1个元素和第n2个元素交换 ElemType* getElement();//得到数组头的指针 ElemType* getElement(size_t n);//得到第n个元素的指针 size_t getLength();//得到存储的元素个数 size_t getMaxSize();//得到顺序表容量 bool showElementDetail();//输出所有的元素细节 bool showElementDetail(size_t n);//输出第n个元素的细节 bool showElementDetail(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,输出元素所有细节 size_t findElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素位置 static int inputAInt(int min = 0,int max = 9,int defaultValue = -1);//从键盘读取,限制为一个min到max间的整数,非法情况返回defaultValue void startControlLoop();//打开控制界面 ~SeqList();//析构函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

susuboom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值