数据结构学习记录连载1
1.题目:基本要求:1) 建立线性表的顺序表类SeqList,
提高要求:在顺序表类SeqList增加一个删除函数,要求删除顺序表中等于item的所有元素。
1.SeqList.h:
/*
* Copyright (c) 2009,FreshAir团队嵌入式软件研发组
* All rights reserved.
*
* 文件名称:SeqList.h
* 摘 要: 定义顺序表类
*
* 当前版本:1.0
* 作 者: 吴友强
* 完成日期:2009年10月12日
*
* 取代版本:
* 原作者 :
* 完成日期:
*/
#include <stdlib.h>
#include <iostream.h>
typedef int DataType;
const int MaxListSize = 100;
class SeqList
{
private:
DataType data[MaxListSize];
int size;
public:
SeqList(void);
~SeqList();
int GetListSize(void) const; //返回顺序表的元素个数size
int ListIsEmpty(void) const; //判顺序表空否,为空返回1,不空返回0
int Find(DataType& item) const; //定位元素item的位置,返回值为item在顺序表中的位置
DataType GetData(int pos) const; //返回顺序表中位置pos上的元素
void Insert(const DataType& item,int pos); //在指定位置pos处插入一个数据元素item
DataType Delete(const int pos); //删除指定位置pos上的数据元素并返回
void ClearList(void); //置顺序表为空
};
2.SeqList.cpp:
/*
* Copyright (c) 2009,FreshAir团队嵌入式软件研发组
* All rights reserved.
*
* 文件名称:SeqList.cpp
* 摘 要: 顺序表类的各个函数实现
*
* 当前版本:1.0
* 作 者: 吴友强
* 完成日期:2009年10月12日
*
* 取代版本:
* 原作者 :
* 完成日期:
*/
#include "SeqList.h"
SeqList::SeqList(void)
{
size = 0;
}
SeqList::~SeqList()
{
}
/*
* 函数名称: GetListSize
* 输 入:
* 输 出:
* 功能描述: 返回顺序表的元素个数size
* 作 者: 吴友强
* 日 期: 2009年10月12日
* 修 改:
* 日 期:
*/
int SeqList::GetListSize() const
{
return size;
}
/*
* 函数名称: ListIsEmpty
* 输 入:
* 输 出:
* 功能描述: 判顺序表空否,为空返回1,不空返回0
* 作 者: 吴友强
* 日 期: 2009年10月12日
* 修 改:
* 日 期:
*/
int SeqList::ListIsEmpty() const
{
return size == 0 ? 1 : 0;
}
/*
* 函数名称: Find
* 输 入:item
* item:需要查找的元素
* 输 出:
* 功能描述: 定位元素item的位置,返回值为item在顺序表中的位置;返回值为-1表示不存在
* 作 者: 吴友强
* 日 期: 2009年10月12日
* 修 改:
* 日 期:
*/
int SeqList::Find(DataType& item) const
{
int i;
if (size == 0)
{
return -1;
}
for (i=0; i<size; i++)
{
if (data[i] == item)
{
break;
}
}
if (i < size)
{
return i;
}
else
{
return -1;
}
}
/*
* 函数名称: GetData
* 输 入:pos
* pos:需要得到数据的位置
* 输 出:
* 功能描述: 定位元素item的位置,返回值为item在顺序表中的位置;返回值为-1表示不存在
* 作 者: 吴友强
* 日 期: 2009年10月12日
* 修 改:
* 日 期:
*/
DataType SeqList::GetData(int pos) const
{
if (pos < 0 || pos > size-1)
{
cerr << "参数pos越界出错!" << endl;
exit(1);
}
return data[pos];
}
/*
* 函数名称: Insert
* 输 入: pos,item
* pos: 需要插入数据的位置
* item: 需要插入的数据
* 输 出:
* 功能描述: 在指定位置pos处插入一个数据元素item
* 作 者: 吴友强
* 日 期: 2009年10月12日
* 修 改:
* 日 期:
*/
void SeqList::Insert(const DataType& item,int pos)
{
if (size == MaxListSize)
{
cerr << "顺序表已满无法插入!" << endl;
exit(1);
}
if (pos < 0 || pos > size)
{
cerr << "参数pos越界出错!" << endl;
exit(1);
}
for (int i=size-1; i>=pos; i--)
{
data[i+1] = data[i];
}
data[pos] = item;
size++;
}
/*
* 函数名称: Delete
* 输 入: pos,item
* pos: 需要删除数据的位置
* 输 出:
* 功能描述: 删除指定位置pos上的数据元素并返回
* 作 者: 吴友强
* 日 期: 2009年10月12日
* 修 改:
* 日 期:
*/
DataType SeqList::Delete(const int pos)
{
DataType temp;
if (0 == size)
{
cerr << "顺序表已空无元素可删!" << endl;
exit(1);
}
if (pos < 0 || pos > size-1)
{
cerr << "参数pos越界出错!" << endl;
exit(1);
}
temp = data[pos];
for (int i=pos; i<size-1; i++)
{
data[i] = data[i+1];
}
size--;
return temp;
}
/*
* 函数名称: ClearList
* 输 入:
* 输 出:
* 功能描述: 置顺序表为空
* 作 者: 吴友强
* 日 期: 2009年10月12日
* 修 改:
* 日 期:
*/
void SeqList::ClearList()
{
size = 0;
}
3.SeqListTest.cpp:
/*
* Copyright (c) 2009,FreshAir团队嵌入式软件研发组
* All rights reserved.
*
* 文件名称:SeqListTest.cpp
* 摘 要: 测试程序
*
* 当前版本:1.0
* 作 者: 吴友强
* 完成日期:2009年10月12日
*
* 取代版本:
* 原作者 :
* 完成日期:
*/
#include "SeqList.h"
int main(int argc, char *argv[])
{
SeqList seqlist;
for (int i=0; i<10; i++)
{
seqlist.Insert(i+10, i);
}
cout << "测试GetData()成员函数结果如下:" << endl;
for(i=0; i<10; i++)
{
cout << seqlist.GetData(i) << " ";
}
cout<< endl << "测试Delete()成员函数结果如下" << endl;
for(i=0; i<10; i++)
{
cout<<seqlist.Delete(0)<<" "<<endl;
}
return 0;
}