顺序表及其基本操作

#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
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
顺序表是一种线性结构,使用数组来实现,其基本操作包括初始化、插入、删除、查找、遍历等。下面是一个简单的顺序表及其基本操作的代码实现: ```c #define MAXSIZE 100 // 定义顺序表的最大长度 typedef struct { int data[MAXSIZE]; // 存储顺序表中的元素 int length; // 顺序表的当前长度 } SeqList; // 初始化顺序表 void InitList(SeqList *L) { L->length = 0; } // 插入元素 int InsertList(SeqList *L, int pos, int elem) { if (pos < 1 || pos > L->length + 1 || L->length == MAXSIZE) { return 0; // 插入位置不合法或顺序表已满,插入失败 } for (int i = L->length - 1; i >= pos - 1; i--) { L->data[i + 1] = L->data[i]; // 将插入位置后的元素依次向后移动一位 } L->data[pos - 1] = elem; // 在插入位置处插入元素 L->length++; // 顺序表长度加1 return 1; // 插入成功 } // 删除元素 int DeleteList(SeqList *L, int pos) { if (pos < 1 || pos > L->length) { return 0; // 删除位置不合法,删除失败 } for (int i = pos; i < L->length; i++) { L->data[i - 1] = L->data[i]; // 将删除位置后的元素依次向前移动一位 } L->length--; // 顺序表长度减1 return 1; // 删除成功 } // 查找元素 int SearchList(SeqList L, int elem) { for (int i = 0; i < L.length; i++) { if (L.data[i] == elem) { return i + 1; // 返回元素在顺序表中的位置 } } return 0; // 未找到元素,返回0 } // 遍历顺序表 void TraverseList(SeqList L) { for (int i = 0; i < L.length; i++) { printf("%d ", L.data[i]); } printf("\n"); } ``` 在上述代码中,`SeqList` 是顺序表的结构体类型,包含一个数组 `data` 用来存储元素,以及一个整型变量 `length` 表示顺序表的长度。其中,`InitList`、`InsertList`、`DeleteList`、`SearchList` 和 `TraverseList` 分别对应顺序表的初始化、插入、删除、查找和遍历操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洋葱ycy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值