02332数据结构(实践)实践报告 | linearlist1 线性表

要做课后作业的童鞋,全部那去吧,VS 2022可编译通过(记得新建工程)。

linearlist1.cpp


//实现文件 linearlist1.cpp 
#include <iostream>
#include <stdlib.h>
#include "linearlist1.h"
//初始化线性表
using namespace std;
void InitList(LinearList& L, int ms)
{
	L.list = new ElemType[ms]; if (!L.list) {
		cout << "Memory allocation failure!" << endl; exit(1);
	}
	L.size = 0; L.MaxSize = ms;
}

//清空线性表
void ClearList(LinearList& L)
{
	L.size = 0;
}
//求线性表长度
int ListSize(LinearList& L)
{
	return L.size;
}
//检查线性表是否为空
bool ListEmpty(LinearList& L)
{
	return L.size == 0;
}
//检查线性表是否为满
bool ListFull(LinearList& L)
{
	return L.size == L.MaxSize;
}
//遍历线性表
void TraverList(LinearList& L)
{
	for (int i = 0; i < L.size; i++) cout << L.list[i] << ' '; cout << endl;
}
//从线性表中查找元素
bool FindList(LinearList& L, ElemType& item)
{
	for (int i = 0; i < L.size; i++) if (L.list[i] == item) {
		item = L.list[i]; return true;

	}
	return false;
}
//更新线性表中的给定元素
bool UpdateList(LinearList& L, const ElemType& item)
{
	for (int i = 0; i < L.size; i++) if (L.list[i] == item) {
		L.list[i] = item; return true;
	}
	return false;
}
//向线性表的表头、表尾或合适位置插入元素
bool InsertList(LinearList& L, const ElemType& item, int mark)
{
	if (ListFull(L)) return false;
	if (mark == 0) {//插入头部
		for (int i = L.size - 1; i >= 0; i--) L.list[i + 1] = L.list[i];
		L.list[0] = item;
	}
	else if (mark < 0) L.list[L.size] = item;//插入尾部
	else {//mark>0
		for (int i = 0; i < L.size; i++) {
			if (item < L.list[i]) break;
			for (int j = L.size - 1; j >= i; j--)
				L.list[j + 1] = L.list[j];
			L.list[i] = item;
		}
	}
	L.size++; return true;
}
//从线性表中删除表头、表尾或等于给定值的元素
bool DeleteList(LinearList& L, ElemType& item, int mark)
{
	if (ListEmpty(L)) return false; if (mark == 0) {//表头
		item = L.list[0];
		for (int i = 1; i < L.size; i++) L.list[i - 1] = L.list[i];
	}
	else {
		if(mark < 0)//表尾
		{
	
		}
			
		else {
			for (int i = 0; i < L.size; i++) {
				if (i >= L.size)
					return false;
				if (L.list[i] == item)
				for (int j = i + 1; j < L.size; j++)
					L.list[j - 1] = L.list[j];
			}
		}//表位置
	}
	L.size--;

	return true;
}
//对线性表按升序或降序输出
void OrderOutputList(LinearList& L, int mark)
{
	int* b = new int[L.size]; int i, k;
	for (i = 0; i < L.size; i++) b[i] = i; for (i = 1; i < L.size; i++) {
		k = i - 1;
		for (int j = i; j < L.size; j++) {
			if (mark == 1 && L.list[b[j]] < L.list[b[k]]) k = j;	//升序if(mark!=1 && L.list[b[k]]<L.list[b[j]]) k=j;	//降序
		}
		if (k != i - 1) { int x = b[i - 1]; b[i - 1] = b[k]; b[k] = x; }
	}
	for (i = 0; i < L.size; i++) cout << L.list[b[i]] << ' ';
	cout << endl;
}

linearlist1.h

//头文件 linearlist1.h
//定义 ElemType 为 int 类型
typedef int ElemType;
//线性表顺序存储类型
struct LinearList
{
ElemType* list;		//存线性表元素
int size;		//存线性表长度
int MaxSize;	//存 list 数组长度
};
//初始化线性表
void InitList(LinearList& L, int ms);
//清空线性表
void ClearList(LinearList& L);
//求线性表长度
int ListSize(LinearList& L);
//检查线性表是否为空
bool ListEmpty(LinearList& L);
//检查线性表是否为满
bool ListFull(LinearList& L);
//遍历线性表
void TraverList(LinearList& L);
//从线性表中查找元素
bool FindList(LinearList& L, ElemType& item);
//更新线性表中的给定元素
bool UpdateList(LinearList& L, const ElemType& item);
//向线性表插入元素
bool InsertList(LinearList& L, const ElemType& item, int mark);
//从线性表中删除元素
bool DeleteList(LinearList& L, ElemType& item, int mark);

//对线性表进行有序输出
void OrderOutputList(LinearList& L, int mark);

listmain1.cpp

//主文件 listmain1.cpp
#include <iostream> //要用到格式控制符
#include"linearlist1.h"
const int ML=10; 
using namespace std;
int main()
{
	LinearList a; 
	InitList(a,ML);int  i; 
	ElemType x;
//依次向线性表 a 表尾插入 5 个整数元素
	cout<<"从键盘输入 5 个整数:"; for(i=0; i<5; i++) {
		cin>>x; InsertList(a,x,-1);
	}
	TraverList(a);
//依次向线性表 a 表头插入 2 个整数元素
	cout<<"从键盘输入 2 个整数:"; 
	cin>>x; 
	InsertList(a,x,0); 
	cin>>x; 
	InsertList(a,x,0);
//按不同次序遍历输出线性表 a 
 TraverList(a); 
 OrderOutputList(a,1); 
 OrderOutputList(a,0);
//把线性表 a 中的所有元素依次有序插入到一个新线性表 b 中" 
	LinearList b;
	InitList(b,ML); 
	for(i=0; i<a.size; i++)
		InsertList(b, a.list[i], 0);
//输出线性表 b 
	cout << "b:";
	TraverList(b);

//从线性表 a 中分别删除表头、表尾、给定值元素
	if(DeleteList(a,x,0)) cout<<"Delete success!"<<endl; else cout<<"Delete fail!"<<endl;
	if(DeleteList(a,x,-1)) cout<<"Delete success!"<<endl; else cout<<"Delete fail!"<<endl;
	cout<<"从键盘上输入一个待删除的整数:"; cin>>x;
	cout << "a:"; TraverList(a);
	if(DeleteList(a,x,1)) cout<<"Delete success!"<<endl; else cout<<"Delete fail!"<<endl;
//输出线性表 a 
	TraverList(a);
	system("pause");
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值