顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。
以下是用C++实现的顺序表的接口操作:
其.cpp文件如下:
#include <stdlib.h>
#include "test.h"
int main()
{
Seqlist<int> mylist;
int select = 1;
int Item;
int Data;
while(select){
cout<<"*****************************************************"<<endl;
cout<<"* [1] push_back(-1结束) [2] push_front(-1结束) *"<<endl;
cout<<"* [3] show_seqlist [0] quit system *"<<endl;
cout<<"* [4] pop_back [5] pop_fornt *"<<endl;
cout<<"* [6] insert_pos [7] insert_value *"<<endl;
cout<<"* [8] delete_pos [9] delete_value *"<<endl;
cout<<"* [10] find_pos [11] find_value *"<<endl;
cout<<"* [12] sort [13] reverse *"<<endl;
cout<<"* [14] clear [15] length *"<<endl;
cout<<"* [16] remove_all &[17] destroy *"<<endl;
cout<<"*****************************************************"<<endl;
cout<<"请选择:>";
cin>>select;
switch(select)
{
case 0:
exit(0);
case 1:
cout<<"请输入要插入的数据(以-1结束):";
while(cin>>Item && Item != -1){
mylist.push_back(Item);
}
mylist.show_seqlist();
break;
case 2:
mylist.show_seqlist();
cout<<"请输入要插入的数(以-1结束):";
while(cin>>Item && Item != -1){
mylist.push_front(Item);
}
mylist.show_seqlist();
break;
case 3:
mylist.show_seqlist();
break;
case 4:
mylist.show_seqlist();
mylist.pop_back();
mylist.show_seqlist();
break;
case 5:
mylist.show_seqlist();
mylist.pop_front();
mylist.show_seqlist();
break;
case 6:
mylist.show_seqlist();
cout<<"请输入要插入的数的位置:";
while(cin>>Item && Item != -1){
cout<<"请输入要插入的数据(以-1结束):";
cin>>Data;
mylist.insert_pos(Item, Data);
}
mylist.show_seqlist();
break;
case 7:
mylist.show_seqlist();
cout<<"请输入要插入的数据:";
cin>>Data;
mylist.insert_value(Data);
mylist.show_seqlist();
break;
case 8:
mylist.show_seqlist();
cout<<"请输入要删除的位置(以-1 结束):";
while(cin>>Item && Item != -1){
mylist.delete_pos(Item);
}
mylist.show_seqlist();
break;
case 9:
mylist.show_seqlist();
cout<<"请输入要删除的数据(以-1 结束):";
cin>>Data;
mylist.delete_value(Data);
mylist.show_seqlist();
break;
case 10:
mylist.show_seqlist();
cout<<"请输入要查找的位置:";
cin>>Item;
mylist.find_pos(Item);
break;
case 11:
mylist.show_seqlist();
cout<<"请输入要查找的数据:";
cin>>Data;
mylist.find_value(Data);
break;
case 12:
mylist.show_seqlist();
mylist.sort();
mylist.show_seqlist();
break;
case 13:
mylist.show_seqlist();
mylist.reverse();
mylist.show_seqlist();
break;
case 14:
mylist.show_seqlist();
mylist.clear();
mylist.show_seqlist();
break;
case 15:
mylist.show_seqlist();
mylist.seqlist_length();
break;
case 16:
mylist.show_seqlist();
cout<<"请输入要删除的相同数据:";
cin>>Data;
mylist.remove_all(Data);
mylist.show_seqlist();
break;
case 17:
mylist.show_seqlist();
mylist.destroy();
mylist.show_seqlist();
break;
default :
break;
}
}
return 0;
}
下面是.h文件:主要是各个接口的实现
#ifndef _TEST_H_
#define _TEST_H_
#include <iostream>
using namespace std;
template<typename Type>
class Seqlist
{
public:
Seqlist(int sz = DEFAULT_SIZE);
~Seqlist();
public:
bool Isfull()const
{
return size >= capacity;
}
bool Isempty()const
{
return size == 0;
}
public:
void push_back(const Type &x);
void push_front(const Type &x);
void pop_back();
void pop_front();
void insert_pos(int i, int Data);
void insert_value(int Data);
void delete_pos(int i);
void delete_value(int Data);
int find_pos(int i);
int find_value(int Data);
int seqlist_length();
void sort();
void reverse();
void clear();
void remove_all(int Data);
void destroy();
void show_seqlist()const;
private:
enum{DEFAULT_SIZE = 8};
Type *base;
int capacity;
int size;
};
template<typename Type>
Seqlist<Type>::Seqlist(int sz)
{
capacity = sz > DEFAULT_SIZE ? sz : DEFAULT_SIZE;
base = new Type[capacity];
size = 0;
}
template<typename Type>
Seqlist<Type>::~Seqlist()
{
delete []base;
base = NULL;
capacity = size = 0;
}
template<typename Type>
void Seqlist<Type>::push_back(const Type &x)
{
if(!Isfull()){
base[size++] = x;
}
}
template<typename Type>
void Seqlist<Type>::push_front(const Type &x)
{
if(!Isfull()){
size++;
for(int i = size - 1; i >= 0; --i){
base[i + 1] = base[i];
}
base[0] = x;
}
}
template<typename Type>
void Seqlist<Type>::pop_back()
{
if(!Isempty()){
size--;
}
}
template<typename Type>
void Seqlist<Type>::pop_front()
{
if(!Isempty()){
for(int i = 0; i < size - 1; ++i){
base[i] = base[i + 1];
}
size--;
}
}
template<typename Type>
void Seqlist<Type>::insert_pos(const Type &x, int pos)
{
if(!Isfull()){
assert(pos >= 1 && pos <= size + 1);
for(u_long i = size + 1; i > pos; --i){
base[i] = base[i - 1];
}
base[pos] = x;
size++;
}
}
template<typename Type>
void Seqlist<Type>::insert_value(int Data)
{
//先排序,再进行插入
}
template<typename Type>
void Seqlist<Type>::delete_pos(int i)
{
if(i < size){
for(int j = i; j < size; ++j){
base[j] = base[j + 1];
}
size--;
}
}
template<typename Type>
void Seqlist<Type>::delete_value(int Data)
{
for(int i = 0; i < size; ++i){
if(base[i] == Data){
for(int j = i; j < size; ++j){
base[j] = base[j + 1];
}
size--;
}
}
}
template<typename Type>
void Seqlist<Type>::show_seqlist()const
{
for(int i = 0; i < size; ++i){
cout<<base[i]<<" ";
}
cout<<endl;
}
template<typename Type>
int Seqlist<Type>::find_pos(int i)
{
if(i < size){
for(int j = 0; j < size; ++j){
if(j == i){
cout<<"the position of "<<i<<" is found! "<<base[j]<<endl;
}
}
}else{
cout<<"the position of "<<i<<" is not found!"<<endl;
}
}
template<typename Type>
int Seqlist<Type>::find_value(int Data)
{
for(int i = 0; i < size; ++i){
if(base[i] == Data){
cout<<"the value "<<base[i]<<" is found!"<<endl;
}
}
}
template<typename Type>
void Seqlist<Type>::sort()
{
int j = 0;
for(int i = 1; i < size; ++i){
int value = base[i];
for(j = i -1; j >= 0 && base[j] > value; j--){
base[j + 1] = base[j];
}
base[j + 1] = value;
}
}
template<typename Type>
void Seqlist<Type>::reverse()
{
for(int i = 0; i < size - 1; ++i){
int max_index = i;
for(int j = i + 1; j < size; ++j){
if(base[j] > base[max_index]){
max_index = j;
}
}
if(max_index != i){
int tmp = base[i];
base[i] = base[max_index];
base[max_index] = tmp;
}
}
}
template<typename Type>
void Seqlist<Type>::clear()
{
size = 0;
cout<<"the list has been cleared!"<<endl;
}
template<typename Type>
void Seqlist<Type>::remove_all(int Data)
{
int i = 0;
while(i < capacity){
if(base[i] == Data){
delete_value(base[i]);
}
i++;
}
}
template<typename Type>
void Seqlist<Type>::destroy()
{
base = NULL;
capacity = size = 0;
cout<<"the list has been destroyed!"<<endl;
}
template<typename Type>
int Seqlist<Type>::seqlist_length()
{
cout<<size<<endl;
}
#endif
测试结果如下:
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
如果输入的数据不在case中,则执行default项,退出程序