创建文件命名为sqlist.h
#ifndef SQLIST_H
#define SQLIST_H
typedef int ElemType;
class SqList
{
public:
SqList(); // 无参构造函数,建立空的顺序表
SqList(ElemType array[], int len); // 有参构造函数,构建len个数据元素的顺序表
~SqList(); // 析构函数
ElemType Get(int index); // 按位置查找
int Find(ElemType x); // 按值查找
bool Insert(int index, ElemType x); // 插入操作
bool Delete(int index); // 删除操作
void PrintList(); // 打印顺序表
private:
ElemType *elem; // 存储空间基址
int length; // 当前长度
int maxLen; // 存储空间的大小,根据第一次构造确定
};
/*
* 单链表
* 采用尾插法
*/
struct Node
{
ElemType data;
Node *next;
};
class LinkList
{
public:
LinkList(); // 无参构造函数,建立空的单链表
LinkList(ElemType array[], int len); // 有参构造函数,构建含有len个Node节点的链表
~LinkList(); // 析构函数
ElemType Get(int index); // 按位置查找
int Find(ElemType x); // 按值查找
bool Insert(int index, ElemType x); // 插入操作
bool Delete(int index); // 删除操作
void PrintList(); // 打印链表
private:
Node *head; // 链表表头
int length; // 链表节点个数
};
#endif // SQLIST_H
创建第二个文件命名为sqlist.cpp
#include "sqlist.h"
#include <iostream>
using namespace std;
SqList::SqList()
{
elem = NULL;
length = 0;
maxLen = 0;
}
SqList::SqList(ElemType array[], int len)
{
elem = new ElemType[len];
maxLen = len;
for (int i = 0; i < len; i++)
{
elem[i] = array[i];
}
length = len;
}
SqList::~SqList()
{
if (maxLen > 0)
{
delete[] elem;
}
}
ElemType SqList::Get(int index)
{
if (index < 1 || index > length)
{
cout << "list do not have the " << index << "elem" << endl;
return index;
}
return elem[index - 1];
}
int SqList::Find(ElemType x)
{
for (int i = 0; i < length; i++)
{
if (elem[i] == x)
{
return (i + 1);
}
}
cout << "list do not have" << x << "elem" << endl;
return x;
}
bool SqList::Insert(int index, ElemType x)
{
if (length >= maxLen)
{
cout << "overflow" << endl;
return false;
}
if (index < 1 || index > length + 1)
{
cout << "Improper insertion" << endl;
return false;
}
for (int i = length; i >= index; i--)
{
elem[i] = elem[i - 1];
}
elem[index - 1] = x;
length++;
return true;
}
bool SqList::Delete(int index)
{
if (length == 0)
{
cout << "list is empty" << endl;
return false;
}
if (index < 1 || index > length)
{
cout << "Improper deletion" << endl;
return false;
}
for (int i = index; i < length; i++)
{
elem[i - 1] = elem[i];
}
length--;
return true;
}
void SqList::PrintList()
{
cout << "the list data:" << endl;
for (int i = 0; i < length; i++)
{
cout << elem[i] << ",";
}
cout << endl << endl;
}
/*********************************** 单链表 ***************************/
LinkList::LinkList()
{
head = NULL;
length = 0;
}
LinkList::LinkList(ElemType array[], int len)
{
Node* tail;
head = new Node;
head->data = array[0];
head->next = NULL;
tail = head;
for (int i = 1; i < len; ++i)
{
Node *temp = new Node;
temp->data = array[i];
temp->next = NULL;
tail->next = temp;
tail = temp;
}
length = len;
}
LinkList::~LinkList()
{
if (length > 0)
{
Node* temp;
while (head != NULL)
{
temp = head;
head = head->next;
delete temp;
}
}
}
ElemType LinkList::Get(int index)
{
if (index < 1 || index > length)
{
cout << "list do not have the " << index << "Node" << endl;
return index;
}
Node* p = head;
for (int i = 0; i < (index - 1); i++)
{
p = p->next;
}
return p->data;
}
int LinkList::Find(ElemType x)
{
Node*p = head;
int count = 1;
while (p != NULL)
{
if (p->data == x)
{
return count;
}
count++;
p = p->next;
}
cout << "list not Node have " << x << "data" << endl;
return x;
}
bool LinkList::Insert(int index, ElemType x)
{
if (index < 1 || index > length + 1)
{
cout << "Improper insertion" << endl;
return false;
}
Node* temp = new Node;
temp->data = x;
temp->next = NULL;
if (index == 1)
{
temp->next = head;
head->next = temp;
length++;
return true;
}
Node* p = head;
for (int i = 2; i < index; i++)
{
p = p->next;
}
temp->next = p->next;
p->next = temp;
length++;
return true;
}
bool LinkList::Delete(int index)
{
if (index < 1 || index > length)
{
cout << "Improper deletion" << endl;
return false;
}
Node* p = head;
if (1 == index)
{
head = head->next;
delete p;
length--;
return true;
}
Node* pre = p;
for (int i = 1; i < index; i++)
{
pre = p;
p = p->next;
}
pre->next= p->next;
delete p;
length--;
return true;
}
void LinkList::PrintList()
{
cout << "the list data:" << endl;
Node* p = head;
while (p != NULL)
{
cout << p->data << ",";
p = p->next;
}
cout << endl << endl;
}
下面是主函数调用上面的
#include "sqlist.h"
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
/*********** 顺序表开始*******************/
ElemType data[10] = {13, 3, 4, 7, 9, 55, 67, 23, 9, 33};
SqList sqlist(data, 10);
sqlist.PrintList();
ElemType n = sqlist.Get(5); // 查找第五个元素的值
cout << "list the five elem is " << n << endl << endl;
int index = sqlist.Find(23); // 查找23在list的位置
cout << "23 the index is " << index << endl << endl;
sqlist.Delete(7); // 删除第7个元素
sqlist.PrintList();
sqlist.Delete(3); // 删除第3个元素
sqlist.PrintList();
sqlist.Insert(3, 5); // 将5插入到第三个位置
sqlist.PrintList();
sqlist.Insert(7, 88); // 将88插入到第7个位置
sqlist.PrintList();
/*********** 顺序表结束*******************/
/*********** 链表开始*******************/
cout << "*******************************************************" << endl << endl;
ElemType linkdata[10] = {99, 33, 44, 77, 89, 55, 67, 51, 91, 33};
LinkList linklist(linkdata, 10);
linklist.PrintList();
ElemType num = linklist.Get(5); // 查找第五个元素的值
cout << "list the five node is " << num << endl << endl;
int linkNum = linklist.Find(55); // 查找55在list的位置
cout << "55 the index is " << linkNum << endl << endl;
linklist.Delete(7); // 删除第7个元素
linklist.PrintList();
linklist.Delete(3); // 删除第3个元素
linklist.PrintList();
linklist.Insert(3, 5); // 将5插入到第三个位置
linklist.PrintList();
linklist.Insert(7, 88); // 将88插入到第7个位置
linklist.PrintList();
/*********** 链表结束*******************/
getchar();
return 0;
}
底下是运行结果