b站 《数据结构与算法基础(青岛大学-王卓)》
所用教材《数据结构C语言版第二版》 中国工信出版集团 人民邮电出版社出版 严蔚敏 编著
同样,代码中名称有些按自己想法写的,只能给一些基本操作供大家参考
#include<iostream>
#define MAX 100
using namespace std;
class Elem { //定义数据项
public:
int name;
};
class List { //定义线性表
public:
Elem *list;
int length;
};
int InitList(List &L); //构造一个空线性表
void DestroyList(List& L); //销毁线性表
void ClearList(List &L); //清空线性表
int ListEmpty(List L); //判断线性表是否为空
int ListLength(List L); //返回线性表的长度
int GetElem(List L, int i, Elem& e); //返回线性表中第i给数据元素的值
int LocateElem(List L, Elem e); //查找元素并返回是第几个元素
int ListInsert(List &L, int i, Elem e); //插入元素
int ListDelete(List& L, int i, Elem e); //删除元素
void MergiList(List LA, List LB, List& LC); //两个非递增有序表合并成一个非递增有序表
int InitList(List &L) //构造一个空线性表
{
L.list = new Elem [MAX];
if (!L.list)
cerr << "分配储存空间失败";
L.length = 0;
}
void DestroyList(List& L) //销毁线性表
{
if (L.list)
delete L.list;
}
void ClearList(List &L) //清空线性表
{
L.length = 0;
}
int ListEmpty(List L) //判断线性表是否为空
{
if (L.length == 0)
return 1;
else return 0;
}
int ListLength(List L) //返回线性表的长度
{
return L.length;
}
int GetElem(List L, int i, Elem& e) //返回线性表中第i给数据元素的值
{
if (i<1 || i>L.length)
{
cerr << "数据不在线性表范围中";
return 0;
}
e = L.list[i - 1];
}
int LocateElem(List L, Elem e) //查找元素并返回是第几个元素
{
for (int i = 0; i < L.length; i++)
if (L.list[i].name == e.name) return i + 1;
return 0;
}
int ListInsert(List& L, int i, Elem e) //插入元素
{
if (i<1 || i>L.length)return 0;
if (L.length >= MAX)return 0;
for (int j = L.length - 1; j > i - 1; j--)
L.list[j + 1] = L.list[j];
L.list[i - 1] = e;
L.length++;
}
int ListDelete(List& L, int i, Elem e) 删除元素
{
if (i<1 || i>L.length)return 0;
for (int j = i-1; j < L.length-1; j++)
L.list[j] = L.list[j + 1];
L.length--;
}
void MergiList(List LA, List LB, List& LC) //两个非递增有序表合并成一个非递增有序表
{
Elem* pa = LA.list;
Elem* pb = LB.list;
LC.length = LA.length + LB.length;
LC.list = new Elem [LC.length];
Elem* pc = LC.list;
Elem *pa_last = &LA.list[LA.length - 1]; //设置指针指向最后一个元素
Elem* pb_last = &LB.list[LB.length - 1];
while (pa <= pa_last && pb <= pb_last) //两个表都非空
{
if (pa->name <= pb->name)*pc++ = *pa++; //pc=pa,然后pc后移一位,pa后移一位
else *pc++ = *pb++;
}
while (pa <= pa_last) *pc++ = *pa++; //如果LB到表尾了,就把LA中元素依次放入LC中
while (pb <= pb_last) *pc++ = *pb++; //同上
}
int main()
{
}