数据结构学习记录连载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;
}

posted @ 2009-10-17 10:21  蔷薇理想人生  阅读(217)  评论(0编辑  收藏  举报