数据结构— —线性表的顺序表示和实现

简介: 数据结构— —线性表的顺序表示和实现

🎯目的:

1、熟悉VC环境的使用以及程序的输入,编辑,调试,运行的全过程。

2、掌握线性表的顺序结构的静态及操作特点。

3、掌握线性表的顺序结构的静态存储和常见操作在C语言环境中的实现方法。


🎯内容:

1、实现顺序表的定义并创建顺序表。

2、实现线性表顺序存储结构下元素的插入操作。

3、实现线性表顺序存储结构下元素的删除操作。

4、实现线性表顺序存储结构下取元素操作。


🎯环境:

TC或VC++。


🎯步骤:

🎐1、顺序表的存储定义。

typedef struct { //定义顺序表
 
ElemType *elem;
 
int length;
 
} SqList;

🎐2、顺序表的初始化,构造一个空的顺序表。

Status InitList(SqList &L) //创建顺序表
 
{}



🎐3、从键盘上依次输入21、18、30、75、42、56,创建顺序表。

void InputList(SqList &L, int n)
 
//输入顺序表的内容(此函数也可以为void InputList(SqList &L),可根据实际情况编写)
 
{}



🎐4、输出顺序表中的各元素值。

void OutputList(SqList L) //输出顺序表中各元素的值
 
{}



🎐5、要求如果分别在顺序表的第3个位置和第9个位置插入数据时,能够给出插入成功或失败的信息,并输出顺序表中的各元素值。

Status ListInsert(SqList &L, int i, ElemType e)
 
{}



🎐6、要求如果删除顺序表中的第6个数据元素和第8个数据元素,能够针对不同情况给出删除成功或失败的信息,并输出单链表中的各元素值。

Status ListDelete(SqList &L, int i)
 
{}



🎐7、要求如果取顺序表中的第5个数据元素和第7个数据元素时,可以给出对应的提示信息,如果能取到,请输出该值。

Status GetElem(SqList L, int i, ElemType &e)
 
{}



🎐8、查找35,42是否在顺序表中,查找成功返回其位置信息,否则返回0。

int LocateElem(SqList L, ElemType e)
 
{}



🎯 完整代码:

#include "iostream"
using namespace std;
#define ERROR 0
#define OVERFLOW -1
#define MAX 50
#define OK 1
typedef int Status;
typedef struct{//定义顺序表 
  int *elem;
  int length;
}SqList;
Status InitList(SqList &L){//创建顺序表 
  L.elem=new int[MAX];//为顺序表分配大小为MAX的数组空间 
  if(!L.elem)
    return OVERFLOW;//验证分别配空间是否成功 
  L.length=0;//表长设置为0
  return OK; 
}
void InputList(SqList &L,int n){//输入表中的内容 
  for(int i=0;i<n;i++){
    cin>>L.elem[i];
    L.length++;
  }
}
void OutputList(SqList L){//输出表中的值
  cout<<"表中的值为:";
  for(int i=0;i<L.length;i++){
    printf("%-3d ",L.elem[i]);
  } 
  cout<<'\n';
}
Status ListInsert(SqList &L,int i,int e){//元素插入
//可插入的位置1<=i<=L.length+1
  if(i<1||i>L.length+1)
    return ERROR;//表示i的值不合法
  if(L.length==MAX)
    return ERROR;//表示空间已满
  for(int j=L.length-1;j>=i-1;j--)
    L.elem[j+1]=L.elem[j];//从最后一个元素往后移 
  L.elem[i-1]=e;
  L.length++; //长度加1
  return OK; 
}
Status ListDelete(SqList &L,int i){//元素的删除
//可删除的位置1<=i>=L.length
  if(i<1||i>L.length)
    return ERROR;
  for(int j=i-1;j<L.length;j++)
    L.elem[j]=L.elem[j+1];//从第i+1个元素往前移 
  L.length--; //长度减一 
  return OK;
}
Status GetElem(SqList L,int i,int &e){//取出表中的值
 //可取的位置1<=i<=L.length
  if(i<1||i>L.length)
    return ERROR;//表示i的值不合法
  e=L.elem[i-1];//将第i个值付赋给了e 
  return OK;
}
int LocateElem(SqList L, int e){//查找值的位置
   for(int i=0;i<L.length;i++){
    if(L.elem[i]==e)
      return i+1;
  }
  return 0; //查找失败 
} 
int main(){
  SqList L;
  int n,choose,t,i,e;
  printf("1.创建顺序表\n");
  printf("2.输入\n");
  printf("3.输出\n");
  printf("4.插入\n");
  printf("5.删除\n");
  printf("6.取值\n");
  printf("7.查找\n");
  printf("0.退出\n");
  cout<<"请输入您的选择:";
  cin>>choose;
  while(1){//一直循环,直到用break打破为止 
    if(choose==0){
      cout<<"您已退出!\n";
      break;
    }
    switch(choose){//判断用户的选择
      case 1:
         if(InitList(L)==1)
          cout<<"顺序表创建成功!\n";
        else
          cout<<"顺序表创建失败!\n";
        break;
      case 2:
        cout<<"请您输入要输入元素的个数:";
        cin>>n;
        InputList(L,n);
        break;
      case 3:
        OutputList(L);
        break;
      case 4:
        cout<<"请输入您要插入的位置:";
        cin>>i;
        cout<<"请输入您要在此处插入的值:";
        cin>>e; 
        t=ListInsert(L,i,e);
        if(t!=1)
          cout<<"插入位置不合法!!!\n";
        else
          OutputList(L);
        break;
      case 5:
        cout<<"请输入您要删除的位置:";
        cin>>i;
        t=ListDelete(L,i);
        if(t!=1)
          cout<<"删除位置不合法!!!\n";
        else
          OutputList(L);
        break;
      case 6:
        cout<<"请输入您要取的值的位置:";
        cin>>i;
        t=GetElem(L,i,e);
        if(t!=1)
          cout<<"取值位置不合法\n";
        else
          cout<<"第"<<i<<"个元素是"<<e<<endl; 
        break;
      case 7:
        cout<<"请输入您要查找的值:";
        cin>>e;
        t=LocateElem(L,e);
        if(t==0)
          cout<<"您查找的值不在表中\n";
        else
          cout<<"元素"<<t<<"的位置在第"<<t<<"个"<<endl;
        break;
      default:
          cout<<"您的输入有误"<<endl;   
    }
    cout<<"请输入您的选择:";
    cin>>choose;
  }
  return 0;
}
目录
相关文章
|
4天前
|
存储 搜索推荐
【数据结构】线性表的抽象数据类型
【数据结构】线性表的抽象数据类型
17 1
|
4天前
|
算法 调度 C++
【C/C++ 数据结构 线性表】C/C++中队列的原理与实现:从基础到循环队列
【C/C++ 数据结构 线性表】C/C++中队列的原理与实现:从基础到循环队列
44 0
|
4天前
|
存储
数据结构第二课 -----线性表之单向链表
数据结构第二课 -----线性表之单向链表
|
4天前
|
存储
数据结构第五课 -----线性表之树
数据结构第五课 -----线性表之树
|
4天前
数据结构第四课 -----线性表之队列
数据结构第四课 -----线性表之队列
|
4天前
数据结构第四课 -----线性表之栈
数据结构第四课 -----线性表之栈
|
4天前
|
存储
数据结构第三课 -----线性表之双向链表
数据结构第三课 -----线性表之双向链表
|
4天前
|
存储
数据结构第二课 -----线性表之顺序表
数据结构第二课 -----线性表之顺序表
|
4天前
|
存储
数据结构:3、线性表和顺序表
数据结构:3、线性表和顺序表
18 1
|
4天前
|
机器学习/深度学习
数据结构:线性表
数据结构:线性表
26 0