顺序表及其基本操作

来源:互联网 发布:优化英文网站 编辑:程序博客网 时间:2024/05/21 18:41
#include<iostream>      //相关顺序表的操作 
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2


typedef int Status;
typedef int ElemType;


#define MAX 100
typedef struct {//定义一个符合顺序表的结构体 
ElemType *elem;
int length;
}SqList;


Status InitList(SqList &L)//构造一个空顺序表为,名字为:L 
{
L.elem = new ElemType[MAX];//分配MAX数组的空间,指针指向数组的首地址
  if(!L.elem) return 0;//分配失败 
L.length = 0;//空表内元素含有长度为0  
return OK; 
}


int LocateElem_Sq(SqList L,ElemType e)//进行按值查找,返回其位序,i+1 
{
int i;
for(i=0;i<L.length-1;i++)
if(L.elem[i]==e) return i+1;
return 0;//如果没有找到,返回0 
}


int GetElem_Sq(SqList L,ElemType i)//按位序查找,返回下标为i的值 
{
if(i<1 || i>L.length) return ERROR;//先判断i的值是否合法 
return L.elem[i];//合法返回下标为i的值 
}


Status Intsert_Sq(SqList &L,int i,ElemType e)//在位置i插入一个数e, 
{
int j;
if(i<1 || i>L.length-1) return ERROR;//如果i不合法 
if(L.length == MAX) return OVERFLOW;//如果存储已经满了 
for(j=L.length-1;j>=i-1;j--)
{
L.elem[j+1] = L.elem[j];//所以插入位置之后的元素后移一位 
}
L.elem[i-1] = e;//在第i个位置赋值为e 
++L.length;//长度增加1 
return OK;
}


Status Delet_Sq(SqList &L,int i,ElemType e)//删除第i个元素 
{
int j;
if(i<1 || i>L.length-1) return ERROR;//如果i不合法 
for(j=i;j<=L.length-1;j++)
{
L.elem[j-1] = L.elem[j];//删除的元素之后全部前移动一位 
}
e = L.elem[i];
--L.length;//长度减少1 
return OK;
}


int main()
{
  SqList L; 
  int i;//位序 
   int e;//返回的值 
   int locate;//查找出来的数 
   int number;//按位序查找的数 
   int inum;//要插入的数 
  int choose;//代表选择的操作 
  cout<<"1.建立顺序表\n";
  cout<<"2.输入数据\n";
  cout<<"3.进行值的查找\n";
  cout<<"4.进行按序号查找\n";
  cout<<"5.插入\n";
  cout<<"6.删除\n";
  cout<<"7.输出数据\n";
  cout<<"0,退出\n";
 // cout<<"\n";
 choose = -1;
while(choose!=0)
{
cout<<"请输入你的选择\n";
cin>>choose;
switch(choose)
{
case 1:
        if(InitList(L))
               cout<<"新建成功!\n\n";
       else
             cout<<"新建失败!\n";
       break;
case 2:
   cout<<"请输入十个数\n\n";
  
   for(i=0;i<10;i++)
    cin>>L.elem[i];
    L.length = 10;
    cout<<endl;
    break;
   case 3:
     
      cout<<"请输入要查询的数\n";
      cin>>e;
      locate = LocateElem_Sq(L,e);
      if(locate!=0)
         cout<<e<<"位序为"<<locate<<"\n";
       else 
         cout<<"不存在这个数,查找失败!\n";
          break;
   case 4:
       // int i;
     cout<<"请输入要查找的位序\n";
     cin>>i;
    number = GetElem_Sq(L,i);
     if(number == ERROR) 
        cout<<"查找失败,i不合法\n";
      else
        cout<<"位序为i的值是"<<number<<"\n";
         break;
   case 5:
     
     cout<<"请输入要插入的位置和数\n";
     cin>>i>>inum;
     if(Intsert_Sq(L,i,inum))
        cout<<"插入成功\n";
     else 
        cout<<"插入失败!\n";
         break;
    case 6:
    // int i;
     cout<<"输入要删除的数的位序\n";
     cin>>i;
     if(Delet_Sq(L,i,e))
         cout<<"删除成功"<<"删除的数为"<<e<<"\n";
       else
         cout<<"删除成功!\n";
          break;
   case 7:
    //int i;
    cout<<"现在顺序表的内容是:\n";
    for(i=0;i<L.length;i++)
     cout<<L.elem[i]<<" ";
     cout<<endl<<endl;
     break;
   
}
}
return 0;
}
0 0
原创粉丝点击