数据结构实验(1)

本文记录了一次C++数据结构实验,任务是创建一个顺序表并调整数组,使得所有小于0的元素位于左侧,大于0的元素位于右侧。代码实现了SeqList类,包括构造函数、打印和调整元素顺序的功能,并通过两组测试数据验证了算法的正确性。
摘要由CSDN通过智能技术生成

数据结构实验(C++)

PS:仅课程实验记录

题目:创建一个顺序表,存放在数组 A[N]中,元素的类型为整型,设计算法调整 A,使其左边的所有元素小于 0,右边的所有元素大于 0(要求算法的时间复杂度和空 间复杂度均为 O(n))。

//头文件部分
SeqList.h
#pragma once
#include <iostream>
using namespace std;
const int MaxSize = 50;
class SeqList
{
public:
	SeqList();						//无参构造函数
	SeqList(int a[], int len);			//有参构造函数
	~SeqList() {}					//析构函数
	void PrintList();				//打印操作
	void SwapItem();				// 功能实现
private:
	int data[MaxSize];
	int length;
};

//cpp文件部分
SeqList.cpp
#include"SeqList.h"
SeqList::SeqList()				 				//无参构造函数
{
	length = 0;
}
SeqList::SeqList(int a[], int len)					//有参构造函数
{
	if (len > MaxSize)
		throw std::exception("参数非法");
	else
	{
		for (int i = 0; i < len; i++)
		{
			data[i] = a[i];
		}
		length = len;
	}
}
void SeqList::PrintList() 						//打印操作
{
	cout << "顺序表元素为:  ";
	for (int i = 0; i < length; i++)
	{
		cout << data[i] << "   ";
	}
	cout << '\n';
	cout << '\n';
}
// 功能实现
void SeqList::SwapItem()
{
	int i = 0 , j = 0;   						
//将所有小于0的元素排在最左边
	for (j = 0; j < length; j++)
	{
		if (data[j] < 0)
		{
			int temp = data[i];
			data[i] = data[j];
			data[j] = temp;
			i++;
		}
	}
	//记录左侧第一个不是小于0的元素下标
	int k = 0;
	for (k = 0; data[k] < 0; k++);		
	//对右侧0元素进行处理
	for (int f = k; f < length; f++)
	{
		if (data[f] == 0)
		{
			int temp = data[k];
			data[k] = data[f];
			data[f] = temp;
			k++;
		}
	}
}
//测试函数
int main()
{
	int T[10] = { -1,-2,-4,-3,5,-2,-3,3,-3,8 };
	SeqList Seq1(T, 10);
	cout << "\n排列前:";
	Seq1.PrintList();
	Seq1.SwapItem();						//执行操作
	cout << "排列后:";
	Seq.PrintList();
	cout << "------------------------------------------------------------------" << endl;
	int S[10] = { -1,4,2,6,0,5,-2,-4,0,-1 };
	SeqList Seq2(T, 10);
	cout << "排列前:";
	Seq2.PrintList();
	Seq2.SwapItem();						//执行操作
	cout << "排列后:";
	Seq2.PrintList();
	cout << "------------------------------------------------------------------" << endl;
	return 0;
}


测试结果
本次实验采用两组长度为10数组进行测试,第一组数据是数组中的元素不包含0的情况,第二组数据是数组中包含多个0的情况;
int T[10] = { -1,-2,-4,-3,5,-2,-3,3,-3,8 };
int S[10] = { -1,4,2,6,0,5,-2,-4,0,-1 };
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值