数据结构-顺序表

/* 学习B站的王道考研-数据结构所做的笔记
   算法的时间复杂度
        空间复杂度
  
   1.1线性表-顺序表
   知道数据结构的三个内容:
   1.逻辑存储关系
   2.物理关系
   3.该数据结构的常规操作。
*/
/*
   线性表的常规操作:
   初始化一个线性表:InitList(&L);
   销毁一个线性表:DestoryList(&L);
   插入操作:ListInsert(&L,i,e);
   删除操作:listDelete(&L,i,&e);
   按值查找:LocateElem(L,e);
   按位查找:GetElem(L,i);

   其他操作:
   求表长:Length(L);
   输出操作:PrintList(L);
   判空操作:Empty(L);
 
   
   在什么时候需要在传入参数的时候引用“&”,对参数要带回来。

*/
#include<stdio.h>
#include<stdlib.h>
#include<string>

#define Maxsize 10     
typedef  int ElemType;//这里根据顺序表中数据的类型来定义,我们假设数据为int型。
typedef struct{
    ElemType data[Maxsize];
    int length;
}SqList;
//基本操作-初始化一个顺序表 -静态分配
void InitList(SqList &L)
{
   for(int i=0;i<Maxsize;i++)
   {L.data[i]=0;};
   L.length=0;
};
//在线性表中加入下一个元素  算法时间复杂度O(1);
bool ListNextInsert(SqList &L)
{
  if(L.length>=Maxsize)return false;
  scanf("%d",&L.data[L.length]);
  L.length++;
  return true;
}
//往线性表的指定位置i插入指定的元素e,算法时间复杂度O(n)
bool ListInsert(SqList &L,int i,ElemType e)
{
  if(L.length>=Maxsize||i>L.length+1||i<1) return false;//判断是否会溢出 判断是否有效
  for( int j=L.length;j>=i;j--)
     L.data[j]=L.data[j-1];
  L.data[i-1]=e;
  L.length++;
  return true;
}
//把顺序表的指定位置的元素给删除,并且把删除的值传入元素e中,算法的时间复杂度0(n);
bool ListDelete(SqList &L,int i,ElemType &e)
{
   if(i<i||i>L.length)return false;
   e=L.data[i-1];
   for(int j=i;j<L.length;j++)
      L.data[j-1]=L.data[j];
   L.length--;
   return true;
}
//顺序表的按位查找,过去表中第i各元素的值;算法时间复杂度O(1)
ElemType GetElem(SqList L,int i)
{  if(i<1||i>L.length)return 0;

   return L.data[i-1];
}
//顺序表的按值查找,在表L中查找到给定关键字的元素;时间算法复杂度O(n)
int LocateElem(SqList L,ElemType e)
{
   for(int i=0;i<L.length;i++)
      if(e==L.data[i])
       return i+1; 
   return 0;
}
//PrintList(SqList L) 打印顺序表所有的元素
bool PrintList(SqList L)
{
   printf("当前顺序表内容为");
   for(int i=0;i<L.length;i++)
   {
      printf("%d",L.data[i]);
   }
   printf("\n");
   return true;
}

bool mune()
{
   printf("1.输出当前表长\n");
   printf("2.输出当前顺序表的内容\n");
   printf("3.在表尾添加元素\n");
   printf("4.在指定位置i处添加某一元素\n");
   printf("5.在指定位置i处删除元素\n");
   printf("6.查找元素e的位置\n");

}
int main()
{
   SqList L;
   InitList(L);
   int choice,temp,i;
   while (1)
   {
     mune();
     printf("请输入选择的序号:");
     scanf("%d",&choice);
     switch (choice)
     {
       case 1: printf("当前表长:%d",L.length);printf("\n");break;
       case 2: PrintList(L);break;
       case 3: ListNextInsert(L);break;
       case 4: printf("请依次输入位置i和内容e:");scanf("%d %d",&i,&temp);ListInsert(L,i,temp);break;
       case 5: printf("请输入删除的位置i:");scanf("%d",&i);ListDelete(L,i,temp);printf("删除元素为:%d \n",temp);
       default:printf("输入错误");
     }
   }
}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值