您的位置:首页 > 编程语言 > C语言/C++

C++--顺序表与单链表实现

2017-05-02 22:25 495 查看
大一时候写的东西, 基础东西就不讲解思路了

#include <iostream>
#include <cmath>
#include <iomanip>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;

int MAXSIZE=100;
template<class T>
class sqlist{
public:
T a[100];
int len;
void input(){
int b;
cout<<"输入元素个数N"<<endl;
cin>>b;
len=b;
cout<<"输入元素"<<endl;
for(int k=0;k<len;k++)
{
cin>>a[k];
}
cout<<endl;
}
void output( )
{
cout<<"现在表中元素有:";
for(int i=0;i<len;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
void insert( T x,int i) //将X插入到第I个位置
{
if(len>=MAXSIZE)
cout<<"表已满"<<endl;
else if((i<1)||(i>len+1))
cout<<"插入位置有误"<<endl;
else
{
cout<<"将"<<x<<"插入到第"<<i<<"个位置"<<endl;
for(int j = len;j>=i;j--)
{

a[j+1]=a[j];
}
a[i]=x;
len++;
}
}
void deleteX( int i) //删除第I个位置
{
if((i<0)||(i>len))
cout<<"输入位置有误"<<endl;
else
{
for(int j = i;j<len-1;j++)
{
a[j]=a[j+1];
}
len--;
}
}
bool empty( ){
if(len==0)
return true;
else return false;
}
};
template<class T1>
struct node
{
T1 data;
node *next;
node();
node(T1,node<T1> *link=NULL);
};
template<class T2>
class nodelist
{
protected:
int count;
node<T2> *set_position(int position)const
{
node<T2> *q=head;
for(int i =0;i<position;i++) q=q->next;
return q;
}

node<T2> *head;
public:
//    ~nodelist();
//    nodelist(const nodelist<T2> ©);
void operator=(const nodelist<T2> ©);
void output()
{
if(count==0)
cout<<"表空"<<endl;
else
{
cout<<"现在表中有:"<<endl;
for(int i =0; i<count;i++ ){
cout<<set_position(i)->data<<" ";
}
cout<<endl;
}

}
void  insert(int position,const T2 &x)
{
if(position<0||position>count) cout<<"位置有误"<<endl;
else {
node<T2> *new_node,*previous,*following;
previous=NULL;
if(position>0){
previous = set_position(position-1);
following=previous->next;
}
else following=head;
new_node=new node<T2>(x,following);
if(position==0)
head=new_node;
else
previous->next=new_node;
count++;
}
}

void deletex(int position)
{

if(position<0||position>count)
cout<<"输入位置有误"<<endl;
else if(position!=count)
{
node<T2> *mp;
mp=set_position(position);
set_position(position-1)->next=set_position(position+1);
delete mp;
count--;
}
else if(position==count)
{
node<T2> *now;
now=set_position(position);
set_position(position-1)->next=NULL;
delete now;
count--;
}
}
};
void menu(){
cout<<"输入一个数字选择功能"<<endl;
cout<<"1.建表   ";
cout<<"2.显示   ";
cout<<"3.插入   ";
cout<<"4.删除   ";
cout<<"9.退出"<<endl;

}
void menu1()
{
cout<<"输入0选择顺序存储结构"<<endl;
cout<<"输入1选择链接存储结构"<<endl;
cout<<"输入9选择退出程序"<<endl;
}
int main()
{

int N;
bool falg = true;
while(falg){

cin>>N;
switch(N)
{
menu1();
case 0:
{
bool fa1=true;
sqlist<int> l;
menu();
int n;

while(fa1){
cin>>n;
switch(n)
{
case 1:
{

l.input();

cout<<"继续输入数字选择"<<endl;
break;
}
case 2:
{
if(l.empty())
cout<<"表空"<<endl;
else
l.output();
cout<<"继续输入数字选择"<<endl;
break;
}
case 3:
{
int x,i;
cout<<"输入元素X"<<endl;
cin>>x;
cout<<"输入插入位置i"<<endl;
cin>>i;
l.insert(i,x);
l.output();
cout<<"继续输入数字选择"<<endl;
break;
}
case 4:
{
int i;
cout<<"输入i,删除第i个位置元素"<<endl;
cin>>i;
l.deleteX(i);
l.output();
cout<<"继续输入数字选择"<<endl;
break;
}
case 9:
{
fa1=false;
cout<<"该表操作结束"<<endl;
break;
}
default:
{
cout<<"输入错误,请重新输入"<<endl;
break;
}
}
}
break;            }
case 1:
{
bool fa2=true;
nodelist<int > l1;
menu();
int n;

while(fa2){
cin>>n;
switch(n)
{
case 1:
{
int x;
cout<<"输入第0个元素X"<<endl;
cin>>x;

l1.insert(0,x);

cout<<"继续输入数字选择"<<endl;
break;
}
case 2:
{

l1.output();
cout<<"继续输入数字选择"<<endl;
break;
}
case 3:
{
int x,i;
cout<<"输入元素X"<<endl;
cin>>x;
cout<<"输入插入位置i"<<endl;
cin>>i;
l1.insert(i,x);
l1.output();
cout<<"继续输入数字选择"<<endl;
break;
}
case 4:
{
int i;
cout<<"输入i,删除第i个位置元素"<<endl;
cin>>i;
l1.deletex(i);
l1.output();
cout<<"继续输入数字选择"<<endl;
break;
}
case 9:
{
fa2=false;
cout<<"该表操作结束"<<endl;
break;
}
default:
{
cout<<"输入错误,请重新输入"<<endl;
break;
}
}
}
break;
}
case 9:
{
falg=false;
break;
}
default:
{
cout<<"输入数据有错误,非0非1"<<endl;
cout<<"请重新输入0或者1"<<endl;
break;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: