苏州大学数据结构课程实践 实验5:线性表的实现和应用

本文详述了苏州大学数据结构课程实践实验五的内容,包括顺序表和单链表的实现,以及在日常支出管理中的应用。实验涉及顺序表类的基本操作、单链表的逆置、按值查找、有序表算法等,并提供了相应的测试结果和问题探讨。
摘要由CSDN通过智能技术生成

课程实践实验五:线性表的实现和应用

问题描述及要求

(1)实现顺序表类及基本操作并进行测试。
(2)实现单链表类及基本操作并进行测试。除基本操作外,为单链表类增加逆置、按值查找、按值统计、删除等(递归及非递归)算法并进行测试。
(3)设计并实现有序单链表类,添加有序表下的按值插入、有序表合并等算法。
(4)利用单链表类,完成日常支出简单管理。
输入n项支出项目(可以选择从文件输入),并依次输出所有支出项目。
求出这n个支出项目中的最小、最大和平均消费。
按照日期找出某一天的所有花费。
按照日期和项目找出该项目花费 。
按照项目找出该项目的所有花费。比如要求给出在shoes这一项上总共花了多少钱。

概要设计

(1)对实验内容的理解和二次概括
使用线性表和链表的定义来实现基本的操作,并通过定义节点的数据结构,来实现日常支出管理。
(2)给出系统的功能列表
顺序表类的基本操作:增,减,清除等
单链表的基本操作
单链表的逆置,按值查找,按值统计,删除等
有序表下的按值插入,有序表合并等算法
日常支出的简单管理
(3)程序运行的界面设计 (可以用图示等方式,如:首先出现屏幕提示,请用户选择输入配置的方式,1从键盘输入活单元坐标2……3….然后用户)

(4)确定总体设计思路,采用何种数据结构,设计哪些类,各类的作用 ,类方法的介绍,类之间的关系描述
采用顺序表和单链表的数据结构,设计一个顺序表类,一个单链表类,再针对日常支出的简单管理设计一个单链表类,每个类有基本的操作方法:size, empty, clear, full, reverse, retrieve, replace, remove, insert

详细设计

单链表的逆置:void reverse();
从头结点开始,使指针p指向头节点,再使第一个头结点的next指向第三个节点,第二个节点的next指向头结点,这样就完成了前两个节点的顺序交换,然后让head指向第二个节点,继续循环,依次交换。
单链表的按值查找:Error_code list<list_entry>::search(const list_entry&x, int &position)
从单链表的头节点开始,依次向后,使用position记录位置,如果出现某一个节点的值与查找的值相等,则记录查找到的position位置。

附代码:

#include <iostream>
#include <ctime>
#include <random>
#include <algorithm>

using namespace std;
enum Error_code
{
   
	success, fail, rangeerror, overflow, underflow, range_over
};
int max_list = 10000;
template <class List_entry>
class List
{
   
public:
	List()
	{
   
		count = 0;
	}//构造函数
	int size() const;
	bool full() const;
	bool empty() const;
	void traverse(void(*visit)(List_entry&));
	Error_code retrieve(int position, List_entry& x) const;
	Error_code remove(int position, List_entry& x);
	Error_code insert(int position, const List_entry& x);
	void printout()
	{
   
		for (int i = 0; i < count; i++)
		{
   
			cout << entry[i] << " ";
		}
		cout << endl;
	}
	void ListSort()//顺序表排序
	{
   
		for (int i = 0; i < count - 1; ++i)
		{
   
			int flag = 0;
			for (int j = 0; j < count - i - 1; ++j)
			{
   
				if (entry[j]>entry[j + 1])
				{
   
					swap(entry[j], entry[j + 1]);
					flag = 1;
				}
			}
			if (flag == 0)
				break;
		}
	}
protected: //私有成员数据
	int count;
	List_entry entry[10000];//所谓contiguous是指采用数组方式存储
};

template <class List_entry>
int List <List_entry>::size(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值