您的位置:首页 > 理论基础 > 数据结构算法

数据结构 单链表实现前插、后插、前删、后删、显示、查找等等

2015-10-14 00:02 681 查看
#include"SeqList.h"

void main()
{
SeqList<int> mylist;
int select = 1;
int  Item;
int pos;
while(select)
{
cout<<"******************************************"<<endl;
cout<<"* [1] push_back           [2] push_front *"<<endl;
cout<<"* [3] show_list           [4] pop_back   *"<<endl;
cout<<"* [5] pop_front           [6] insert_val *"<<endl;
cout<<"* [7] insert_pos          [8] find       *"<<endl;
cout<<"* [9] delete_pos          [10] delete_val*"<<endl;
cout<<"* [11] sort               [12] resert    *"<<endl;
cout<<"* [13] length             [14] clear     *"<<endl;
cout<<"* [15] destory            [0] quit_system*"<<endl;
cout<<"******************************************"<<endl;
cout<<"请选择->";
cin>>select;
switch(select)
{
case 1:
cout<<"请输入要插入的数据(-1结束)->";
while(cin>>Item, Item!= -1)
{
mylist.push_back(Item);
}
break;
case 2:
cout<<"请输入要插入的数据(-1结束) ->";
while(cin>>Item, Item!= -1)
{
mylist.push_front(Item);
}
break;
case 3:
mylist.show_list();
break;
case 4:
mylist.pop_back();
break;
case 5:
mylist.pop_front();
break;
case 6:
cout<<"请输入要插入的数据:"<<endl;
cin>>Item;
mylist.insert_val(Item);
break;
case 7:
cout<<"请输入要插入的数据:"<<endl;
cin>>Item;
cout<<"请输入要插入的位置:"<<endl;
cin>>pos;
mylist.insert_pos(pos,Item);
break;
case 8:
cout<<"请输入要查找的数据:"<<endl;
cin>>Item;
pos = mylist.find(Item);
if(pos == -1)
cout<<"所查找的数据不存在!"<<endl;
break;
case 9:
cout<<"请输入要删除的位置:"<<endl;
cin>>pos;
mylist.delete_pos(pos);
break;
case 10:
cout<<"请输入要删除的数值:"<<endl;
cin>>Item;
mylist.delete_val(Item);
break;
case 11:
mylist.sort();
break;
case 12:
mylist.resver();
break;
case 13:
cout<<"顺序表的长度为:"<<mylist.length()<<endl;
break;
case 14:
mylist.clear();
break;
case 15:
mylist.destory();
break;
default:
break;
}
}
}
#include<iostream>
using namespace std;
#ifndef SEQLIST_H
#define SEQLIST_H

typedef enum{FALSE,TRUE}Status;
#define DefaultSize  8
template<typename type>
class SeqList
{
public:
SeqList(int sz = DefaultSize)
{
capacity = sz > DefaultSize ? sz : DefaultSize;
base = new type[capacity];
size = 0;
}
~SeqList()
{
delete []base;
base = NULL;
capacity = size = 0;
}

public:
Status IsFull()const
{
if(size >= capacity)
return TRUE;
else
return FALSE;
}
Status IsEmpty()const
{
if(size == 0)
return TRUE;
else
return FALSE;
}

Status push_back(const type &x)
{
if(IsFull())
{
cout<<"空间已满"<<x<<"不能插入顺序表!"<<endl;
return FALSE;
}
else
base[size++] = x;
return TRUE;
}
Status push_front(const type &x)
{
if(IsFull())
{
cout<<"空间已满"<<x<<"不能插入顺序表!"<<endl;
return FALSE;
}
for(int i=size; i>0; --i)
{
base[i] = base[i-1];

}
base[0] = x;
size++;
return TRUE;

}
Status pop_back()
{
if(IsEmpty())
{
cout<<"顺序表已空,不能尾删数据!"<<endl;
return FALSE;
}
size--;
return TRUE;

}

void show_list()const
{
for(int i=0; i<size; ++i)
{
cout<<base[i] <<" ";
}
cout<<endl;
}
Status pop_front()
{
if(IsEmpty())
{
cout<<"顺序表已空,不能头删数据!"<<endl;
return FALSE;
}
for(int i=0; i<size; i++)
{
base[i] = base[i+1];

}
size--;
return TRUE;
}
Status insert_val(const type &x)
{
if(IsFull())
{
cout<<"空间已满,不能按值插入!"<<endl;
return FALSE;
}
int i = 0;
while(i<size && x>base[i])
{
i++;
}
insert_pos(i,x);
return TRUE;
}
Status insert_pos(int pos, const type &x)
{
if(pos<0 || pos>size)
return FALSE;
for( int i=size; i>pos; --i)
{
base[i] = base[i-1];
}
base[pos] = x;
size++;
return TRUE;
}
int find(const type &key)const
{
if(size == 0)
{
cout<<"空间为空,不能继续查找!"<<endl;
return -1;
}
for(int i=0; i<size; ++i)
{
if( base[i] == key)
return i;
}
return -1;
}
Status delete_pos(int pos)
{
if(pos<0 || pos>size)
{
return FALSE;
}
for(int i=pos; i<size; ++i)
{
base[i] = base[i+1];
}
size--;
return TRUE;
}
Status delete_val(const type &x)
{
int pos = find(x);
if(pos == -1)
{
return FALSE;
}
delete_pos(pos);
return TRUE;

}
void sort()
{
if(size == 0)
return ;
for(int i=0; i<size-1; ++i)
for(int j=0; j<size-i-1; ++j)
{
if(base[j]>base[j+1])
{
int tmp = base[j+1];
base[j+1] = base[j];
base[j] = tmp;

}

}
}

void resver()
{
if(size == 0)
return ;
int i = 0;
int j = size-1;
while(i<j)
{
type tmp =base[i];
base[i] = base[j];
base[j] = tmp;
i++;
j--;
}
}

int length()const
{
return size;
}

void clear()
{
size = 0;
}

Status destory()
{
if(base==NULL)
return FALSE;
delete []base;
size = capacity = 0;
return TRUE;
}

private:
type *base;
int size;
int  capacity;
};

#endif



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: