65,210
社区成员
发帖
与我相关
我的任务
分享
//SeqList.h
#ifndef SSEQLIST_H_INCLUDED
#define SSEQLIST_H_INCLUDED
#include<iostream>
#define DEFAULT_SIZE 10
template <class T>
class SeqList
{
public:
//构造和析构函数
SeqList();
SeqList(int size);
virtual ~SeqList();
public:
//各种操作函数
int GetLength()const; //获取长度
int LocateItem(T x)const; //定位元素x,返回序号加1
void InsertItem(T x,int i); //在i处插入元素x,若i不符合条件则插入失败
void InsertTail(T x); //在顺序表尾部插入x
void DeleteItem(T x); //删除x元素,若找不到,则删除失败
void DeleteTail(); //删除尾部元素
T &GetItem(int i); //获取位置i处的元素
void SetItem(T x,int i); //修改位置i处的元素
public:
int IsIn(T x); //判断x是否在顺序表中
int IsEmpty(); //空返回1,否则返回0
int IsFull(); //满返回1,否则返回0
public:
void Show()
{
cout<<"顺序表中一共有"<<last+1<<"个元素"<<endl;
for(int i=0;i<=last;i++)
cout<<data[i]<<" ";
cout<<endl;
}
public:
T *data;
int MAXSIZE;
int last;
}
#endif // SSEQLIST_H_INCLUDED
//SeqList.cpp
#include "SSeqList.h"
/*动态分配存储空间*/
template<class T>
SeqList<T>::SeqList()
{
MAXSIZE = DEFAULT_SIZE;
last = -1;
data = new T[MAXSIZE];
}
template<class T>
SeqList<T>::SeqList(int size)
{
if(size<=0)
{
MAXSIZE = 0;
last = -1;
data = NULL;
}
else
{
MAXSIZE = size;
last = -1;
data = new T[MAXSIZE];
}
}
/*插入操作*/
template<class T>
void SeqList<T>::InsertItem(T x,int i)
{
/*i-1的值位于last之间,且顺序表未满*/
if((i-1)<0||i>=MAXSIZE||(i-1)>last||IsFull())
{
return;
}
for(int index = last;index>=(i-1);index--)
{
data[index+1] = data[index];//移动元素
}
data[i-1] = x;
last++;
}//时间复杂度O(n)
template<class T>
void SeqList<T>::InsertTail(T x)
{
if((last==MAXSIZE-1)||IsFull())
{
return;
}
data[++last] = x;
}//时间复杂度O(1),
//删除操作
template<class T>
void SeqList<T>::DeleteItem(T x)
{
int i = LocateItem(x);
if((i-1)>=0)
{
for(int index = i-1;index<=last;index++)
{
data[index] = data[index+1];//移动元素
}
last--;
}
}//时间复杂度O(n),主要用在移动元素上
template<class T>
void SeqList<T>::DeleteTail()
{
if(last>=0)
{
last--;
}
}//时间复杂度O(1)
//定位函数
template<class T>
int SeqList<T>::LocateItem(T x)const
{
for(int i = 0;i<last;i++)
{
if(data[i]==x)
{
return i+1;
}
}
return 0;
}//时间复杂度O(n)
template<class T>
int SeqList<T>::GetLength()const
{
return last+1;
}
template<class T>
void SeqList<T>::SetItem(T x,int i)
{
if((i-1)<0||last==-1||(i-1)>last)
{
return;
}
data[i-1] = x;//修改
}
template<class T>
T &SeqList<T>::GetItem(int i)
{
return (i<0||i>last)?NULL:data[i];
}
template<class T>
int SeqList<T>::IsIn(T x)
{
for(int i = 0;i<=last;i++)
{
if(data[i]==x)
{
return 1;
}
}
return 0;
}
template<class T>
int SeqList<T>::IsEmpty()
{
return last==-1;
}
template<class T>
int SeqList<T>::IsFull()
{
return last == MAXSIZE;
}
main.cpp
#include <iostream>
#include "SSeqList.h"
using namespace std;
int main()
{
SeqList<int> ls(5);
ls.InsertTail(3);
ls.InsertTail(9);
ls.InsertItem(100,2);
ls.SetItem(99,1);
ls.Show();
cout<<"-------------------"<<endl;
ls.DeleteItem(99);
ls.Show();
cout<<"-------------------"<<endl;
ls.DeleteTail();
ls.Show();
if(ls.IsIn(100))
cout<<ls.LocateItem(100)<<endl;
return 0;
}SeqList.h:33:1: warning: null character(s) ignored
SeqList.h:33:11: warning: null character(s) ignored
SeqList.h:33:13: warning: null character(s) ignored
SeqList.h:33:15: warning: null character(s) ignored
SeqList.h:33:17: warning: null character(s) ignored
SeqList.h:33:19: warning: null character(s) ignored
SeqList.h:33:21: warning: null character(s) ignored
SeqList.h:33:23: warning: null character(s) ignored
SeqList.h:34:1: warning: null character(s) ignored
SeqList.h:34:19: warning: null character(s) ignored
SeqList.h:34:21: warning: null character(s) ignored
SeqList.h:34:23: warning: null character(s) ignored
SeqList.h:34:25: warning: null character(s) ignored
SeqList.h:34:29: warning: null character(s) ignored
SeqList.h:34:31: warning: null character(s) ignored
SeqList.h:34:33: warning: null character(s) ignored
SeqList.h:34:35: warning: null character(s) ignored
SeqList.h:34:37: warning: null character(s) ignored
SeqList.h:34:39: warning: null character(s) ignored
SeqList.h:35:1: warning: null character(s) ignored
SeqList.h:35:19: warning: null character(s) ignored