要做课后作业的童鞋,全部那去吧,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;
}