顺序表的基本操作:
"seqlist.h"头文件
#ifndef SEQLIST_H_INCLUDED
#define SEQLIST_H_INCLUDED
#include <iostream>
#include <stdlib.h>
using namespace std;
template <class Type>
class SeqList
{
public:
SeqList(size_t sz = INIT_SIZE);
bool IsFull() const
{
return size >= capacity;
}
bool IsEmpty() const
{
return size == 0;
}
void show_list();
void push_back(const Type& x);
void push_front(const Type& x);
void pop_back();
void pop_front();
void insert_pos(int pos,const Type& x);
void insert_val(const Type& x);
void delete_pos(int pos);
void delete_val(const Type& x);
int find(const Type& x);
int length() const;
void clear();
void destory();
void resver();
void sort();
private:
enum{INIT_SIZE = 10};
Type *base;
size_t capacity;
size_t size;
};
template<class Type>
SeqList<Type>::SeqList(size_t sz)
{
capacity = sz > INIT_SIZE ? sz : INIT_SIZE;
base = new Type[capacity];
size = 0;
}
template<class Type>
void SeqList<Type>::show_list()
{
for(int i=0; i<size; ++i)
{
cout<<base[i]<<" ";
}
cout<<endl;
}
template<class Type>
void SeqList<Type>::push_back(const Type &x)
{
if(IsFull())
{
cout<<"顺序表已满,不能插入!"<<endl;
return;
}
base[size++] = x;
}
template<class Type>
void SeqList<Type>::push_front(const Type &x)
{
if(IsFull())
{
cout<<"顺序表已满,不能插入!"<<endl;
return;
}
for(int i=size; i>0; --i)
{
base[i] = base[i-1];
}
base[0] = x;
size++;
}
template<class Type>
void SeqList<Type>::pop_back()
{
if(IsEmpty())
{
cout<<"顺序表为空,不能删除!"<<endl;
return;
}
size--;
}
template<class Type>
void SeqList<Type>::pop_front()
{
if(IsEmpty())
{
cout<<"顺序表为空,不能删除!"<<endl;
return;
}
for(int i=0; i<size; ++i)
{
base[i] = base[i+1];
}
size--;
}
template<class Type>
void SeqList<Type>::insert_pos(int pos,const Type &x)
{
if(pos<0 || pos>size)
{
cout<<"要插入的位置非法!"<<endl;
return;
}
if(IsFull())
{
cout<<"顺序表已满,不能插入!"<<endl;
return;
}
for(int i=size; i>pos; --i)
{
base[i] = base[i-1];
}
base[pos] = x;
size++;
}
template<class Type>
void SeqList<Type>::insert_val(const Type& x)
{
int pos = find(x);
if(pos == -1)
{
return;
}
for(int i=size; i>=pos; --i)
{
base[i+1] = base[i];
}
base[pos] = x;
size++;
}
template<class Type>
void SeqList<Type>::delete_pos(int pos)
{
for(int i=pos; i<size; ++i)
{
base[i] = base[i+1];
}
size--;
}
template<class Type>
void SeqList<Type>::delete_val(const Type &x)
{
int pos = find(x);
if(pos == -1)
{
return;
}
for(int i=pos; i<size; ++i)
{
base[i] = base[i+1];
}
size--;
}
template<class Type>
int SeqList<Type>::find(const Type& x)
{
for(int i=0; i<size; ++i)
{
if(base[i] == x)
return i;
}
return -1;
}
template<class Type>
int SeqList<Type>::length() const
{
return size;
}
template<class Type>
void SeqList<Type>::clear()
{
size = 0;
}
template<class Type>
void SeqList<Type>::destory()
{
delete []base;
base = NULL;
}
template<class Type>
void SeqList<Type>::resver()
{
for(int i=0; i<size/2; ++i)
{
int temp =base[i];
base[i] = base[size-i-1];
base[size-i-1] = temp;
}
for(int i=0; i<size; ++i)
{
cout<<base[i]<<" ";
}
cout<<endl;
}
template<class Type>
void SeqList<Type>::sort()
{
for(int j=0; j<size-1; ++j)
{
for(int i=0; i<size-1-j; ++i)
{
if(base[i]>base[i+1])
{
int temp = base[i];
base[i] = base[i+1];
base[i+1] = temp;
}
}
}
for(int i=0;i<size;++i)
{
cout<<base[i]<<" ";
}
cout<<endl;
}
#endif // SEQLIST_H_INCLUDED
主函数:
#include "SeqList.h"
int main()
{
SeqList<int> mylist;
int select = 1;
int Item;
int pos;
while(select)
{
system("CLS");
cout<<"*************************************"<<endl;
cout<<"* [0]quit_system [1]show_list *"<<endl;
cout<<"* [2]push_back [3]push_front *"<<endl;
cout<<"* [4]pop_back [5]pop_front *"<<endl;
cout<<"* [6]insert_pos [7]insert_val *"<<endl;
cout<<"* [8]delete_pos [9]delete_val *"<<endl;
cout<<"* [10]find [11]length *"<<endl;
cout<<"* [12]clear [13]destory *"<<endl;
cout<<"* [14]resver [15]sort *"<<endl;
cout<<"*************************************"<<endl;
cout<<"请输入你的选择:>";
cin>>select;
switch(select)
{
case 1:
mylist.show_list();
system("pause");
break;
case 2:
cout<<"请输入要插入的值(-1结束):>";
while(cin>>Item, Item!=-1)
{
mylist.push_back(Item);
}
break;
case 3:
cout<<"请输入要插入的值(-1结束):>";
while(cin>>Item, Item!=-1)
{
mylist.push_front(Item);
}
break;
case 4:
mylist.pop_back();
break;
case 5:
mylist.pop_front();
break;
case 6:
cout<<"请输入要插入的位置:>";
cin>>pos;
cout<<"请输入要插入的值:>";
cin>>Item;
mylist.insert_pos(pos,Item);
break;
case 7:
cout<<"请输入要插入的值:>";
cin>>Item;
mylist.insert_val(Item);
break;
case 8:
cout<<"请输入要删除的位置:>";
cin>>pos;
mylist.delete_pos(pos);
break;
case 9:
cout<<"请输入要删除的值:>";
cin>>Item;
mylist.delete_val(Item);
break;
case 10:
cout<<"请输入要查找的值:>";
cin>>Item;
pos = mylist.find(Item);
cout<<pos<<endl;
system("pause");
break;
case 11:
pos = mylist.length();
cout<<pos<<endl;
system("pause");
break;
case 12:
mylist.clear();
break;
case 13:
mylist.destory();
break;
case 14:
mylist.resver();
system("pause");
break;
case 15:
mylist.sort();
system("pause");
break;
default:
break;
}
}
return 0;
}
原文地址:http://blog.csdn.net/yangjiankang_0929/article/details/45894771