数据结构:顺序表

数据结构上课上的挺迷的,所以打算自己把算法都用c++写一遍,这样可以方便以后查找,今天搞了一上午才写出第一个算法。。。

顺序表其实很简单,就是一个数组,只是把这个数组放到结构体里了,主要的几个函数也很简单,包括查找,插入,删除。

一些细节部分都会在代码里面说明,所以直接贴代码了:

#include "pch.h"
#include <iostream>
//c++实现顺序表
#define MAXSIZE 100
#define OK 1
#define ERROR 0
using namespace std;
typedef struct
{
	int *data;
	int	length;
}spList;
//初始化顺序表
int InitList(spList &L) //这里&是引用,就是这L和传入的是同一个东西,如果不加的话,就相当于拷贝一个副本
{	//这里传的是*L也就是那个新创建结构体(因为返回的是地址,所以需要用到指针保存数据,*L就相当于结构体变量)
	L.data = new int[MAXSIZE];//新建一个int类型的数组
	if (!L.data) return ERROR;//如果数组创建失败返回错误
	L.data[0] = 1;
	L.data[1] = 2;
	L.data[2] = 3;//先给几个初始值
	L.length = 3;
	return OK;
}
//获取顺序表的取值
int GetElem(spList L, int i,int &e)
{
	if (i<0 || i>L.length) return ERROR;
	e = L.data[i - 1];
	return OK;
}

//顺序表的查找
int LocatElem(spList L,int a)
{
	for (int i = 0; i < L.length; i++)
		if (a == L.data[i]) return i + 1;
	return 0;

}
//顺序表的插入
int ListInsert(spList &L, int i,int e)
{
	if (i<1 || i>L.length + 1) return ERROR;//这里i是从1开始的,我们只能插入1-L.length
	if (L.length == MAXSIZE) return ERROR;//存储空间已满
	for (int j = L.length - 1; j >=i-1; j--)//这里我们顺序表从0开始,所以也就是说把 i-1到总长度-1的这一段数据集体往后移
		L.data[j + 1] = L.data[j];//移动数据
	L.data[i-1] = e;
	++L.length;
	return ERROR;
}
//打印顺序表
void PrintList(spList L) 
{
	for (int i=0; i < L.length; i++)
		cout << L.data[i] << " ";
	cout << endl;
}
//删除顺序表
int ListDelete(spList &L, int i)
{
	if (i<0 || i>L.length) return ERROR;
	for (int j = i; j <= L.length - 1; j++)//删除就是把第i个元素去掉,然后把后面的元素集体往前面移
		L.data[j - 1] = L.data[j];
	--L.length;
	return OK;
}
int main()
{
	spList *L = new spList;//新建一个结构体指针,指向这个结构体
	//这里*L存的指针引用所对应的值(比如*a指向一个变量b=5,那么*a就是这个变量的值5,a就是这个变量的地址,&a是a指针的地址)
	if (!InitList(*L)) return ERROR;
	int a;
	GetElem(*L, 1, a);
	cout << "第一号元素为:" << a<<endl;
	a=LocatElem(*L, 2);
	cout << "2所在的位置为:" << a<<endl;
	ListInsert(*L, 2, 5);
	PrintList(*L);
	ListDelete(*L, 2);
	PrintList(*L);	
}
点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像

Title - Artist
0:00