C++那些事-----学习笔记03之线性表顺序表

1.线性表

1.1相关说明

(1)线性表是一种简单数据结构,主要操作特点是可以在任意位置插入和删除一个数据元素。

(2)可以用顺序、链式两种方式存储。


1.2相关操作

顺序表操作实现

(1)初始化ListInitiate(L)

SqList *ListInitate(SqList *L) {
	//申请分配内存空间
	L = (SqList*)malloc(sizeof(SqList));
	if (L != nullptr)
	{
		//设置顺序表的长度为0,表示为空的顺序表
		L->length = 0;
		cout << "内存分配成功" << endl;
	}
	return L;
}

(2)顺序表插入Insert_Sqlist

int Insert_Sqlist(SqList *L,DataType x,int i) {
	int j = 0;
	//检查顺序表是否已满
	if (L->length >= MAXSIZE-1)
	{
		cout << "顺序表已满,不能插入!!!" << endl;
		return 0;
	}
	if (i<1 || i>L->length + 2)
	{
		cout << "不能在此处插入" << endl;
	}
	for (j = L->length; j >= i - 1; j--)
	{
		L->dataType[j + 1] = L->dataType[j];
		L->dataType[i - 1] = x;
		L->length = L->length + 1;
		return 1;

	}
	cout << "插入元素成功!" << endl;
	return 1;
}

(3)顺序表长度

//顺序表的长度
int Sqlist_Length(SqList *L)
{
	cout << "该顺序表的长度是:" << L->length << endl;        
	return (L->length);
}


其他操作如下:

int Delete_Sqlist(SqList *&L, int i)
{
	int j;
	//检查位置有效性
	if (i<1 || i>L->length + 1)
	{
		cout << "删除位置无效!" << endl;
	}
	else
	{
		//往前移动结点
		for (j = i; j <= L->length; j++)
			L->dataType[j - 1] = L->dataType[j];              //将结点j赋值给j-1;
		L->length--;                              //整个表要减一

		cout << "删除成功!" << endl;
	}
	return 1;
}
int Print_Sqlist(SqList *L)                          //遍历顺序表
{
	int i;
	if (L->length == -1)
	{
		cout << "顺序表为空!" << endl;

	}
	for (i = 0; i <= L->length - 1; i++)
	{
		cout << L->dataType[i] << endl;
		if ((i + 1) % 5 == 0)                      //每行输出为5个元素
			cout << endl;
	}
	return 1;
}

int Search_Sqlist(SqList *L, DataType key)            //查找key
{
	int i;
	for (i = 0; i <= L->length; i++)
	{
		if (L->dataType[i] == key)
		{
			cout << key << "在第" << i + 1 << "位" << endl;
		}
		else
		{
			cout << "查找失败!!!" << endl;
			return 0;
		}
		return 1;
	}
}

完整代码:

#pragma once
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;

#define MAXSIZE 100
#define OVERFLOW -2
#define ERROR -1

typedef int DataType;
typedef int Status;
//定义一个SqList的结构体
typedef struct {
	//存储空间的基地址
	DataType dataType[MAXSIZE];
	//长度
	int length;
}SqList;
SqList *ListInitate(SqList *L) {
	//申请分配内存空间
	L = (SqList*)malloc(sizeof(SqList));
	if (L != nullptr)
	{
		//设置顺序表的长度为0,表示为空的顺序表
		L->length = 0;
		cout << "内存分配成功" << endl;
	}
	return L;
}
//顺序表的长度
int Sqlist_Length(SqList *L)
{
	cout << "该顺序表的长度是:" << L->length << endl;        
	return (L->length);
}
int Insert_Sqlist(SqList *L,DataType x,int i) {
	int j = 0;
	//检查顺序表是否已满
	if (L->length >= MAXSIZE-1)
	{
		cout << "顺序表已满,不能插入!!!" << endl;
		return 0;
	}
	if (i<1 || i>L->length + 2)
	{
		cout << "不能在此处插入" << endl;
	}
	for (j = L->length; j >= i - 1; j--)
	{
		L->dataType[j + 1] = L->dataType[j];
		L->dataType[i - 1] = x;
		L->length = L->length + 1;
		return 1;

	}
	cout << "插入元素成功!" << endl;
	return 1;
}
int Delete_Sqlist(SqList *&L, int i)
{
	int j;
	//检查位置有效性
	if (i<1 || i>L->length + 1)
	{
		cout << "删除位置无效!" << endl;
	}
	else
	{
		//往前移动结点
		for (j = i; j <= L->length; j++)
			L->dataType[j - 1] = L->dataType[j];              //将结点j赋值给j-1;
		L->length--;                              //整个表要减一

		cout << "删除成功!" << endl;
	}
	return 1;
}
int Print_Sqlist(SqList *L)                          //遍历顺序表
{
	int i;
	if (L->length == -1)
	{
		cout << "顺序表为空!" << endl;

	}
	for (i = 0; i <= L->length - 1; i++)
	{
		cout << L->dataType[i] << endl;
		if ((i + 1) % 5 == 0)                      //每行输出为5个元素
			cout << endl;
	}
	return 1;
}

int Search_Sqlist(SqList *L, DataType key)            //查找key
{
	int i;
	for (i = 0; i <= L->length; i++)
	{
		if (L->dataType[i] == key)
		{
			cout << key << "在第" << i + 1 << "位" << endl;
		}
		else
		{
			cout << "查找失败!!!" << endl;
			return 0;
		}
		return 1;
	}
}

调用

#include "SeqList.h"
int main()
{
	static SqList *L;
	L = ListInitate();

	Insert_Sqlist(L,10,1);
	Insert_Sqlist(L, 9, 2);
	Insert_Sqlist(L, 8, 3);
	Insert_Sqlist(L, 7, 4);
	Print_Sqlist(L);
	int length1 = Sqlist_Length(L);
	cout << "该顺序表的长度是:" << length1 << endl;
	Search_Sqlist(L, 8);
	Delete_Sqlist(L,2);

	

	Print_Sqlist(L);
	int length2 = Sqlist_Length(L);
	cout << "该顺序表的长度是:" << length2 << endl;
	getchar();
	return 0;
}

输出:

分配内存空间成功!
插入元素成功!
插入元素成功!
插入元素成功!
插入元素成功!
10
9
8
7
该顺序表的长度是:4
8在第3位
删除成功!
10
8
7
该顺序表的长度是:3
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Y_Mathison

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

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

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

打赏作者

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

抵扣说明:

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

余额充值