总结自己学过所有的顺序表代码

学了一学期数据结构(新手小白一个),很多代码都是从书上学习,算是自己学习的一个总结

分为六大块

1.顺序表的取值(根据位置取值)

2.顺序表的插入

3.顺序表的查找

4.顺序表的删除

5.顺序表的合并

定义

#include <stdlib.h>
#include<iostream>

using namespace std;

 

#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int ElemType ;
typedef int Status;
using namespace std;
typedef struct//最开始的定义
{
    ElemType *elem;//因为定义的是指针所以要给他分配内存
    int length;
}SqList;
    
Status InitList(SqList &L)//初始化分配空间
{
    L.elem=new ElemType[MAXSIZE];//给指针分配空间
    if(!L.elem)exit(OVERFLOW);//如果存储失败就退出
    L.length=0;
    return OK;
}

1.顺序表的取值

Status GetElem(SqList L,int i,ElemType &e)
//这个e的作用是返回值给主函数
{
    if(i<1||i>L.length) return ERROR;//判断i值是否合法
    e=L.elem[i-1];//因为是顺序表知道位置可以直接取值
    return OK;
}
int main()
{
    SqList L;
    InitList(L);
    cin>>L.length;
    for(int i=0;i<L.length;i++)
    {cin>>L.elem[i];}
    int i;
    ElemType x;
    cin>>i;
    
    GetElem(L, i, x);
    cout<<x;
    
    return 0;
}

2.顺序表的查找

找到就输出位置,找不到就输出-1

Status LocateElem(SqList L,ElemType e)
{
    for(int i=0;i<L.length;i++)
    {
        if(L.elem[i]==e)
        {return i+1;}

    }
    return -1;
}
int main()
{
    SqList L;
    InitList(L);
    cin>>L.length;
    for(int i=0;i<L.length;i++)
    {cin>>L.elem[i];}
    
    ElemType x;
    cin>>x;
    
    cout<<LocateElem(L, x);
    
    return 0;
}

3.顺序表的插入

//在第i个位置插入,实际是在顺序表的【i-1】位置
//操作前输出一遍,操作后输出一遍
Status ListInsert(SqList &L,int i,ElemType e)
{int j;
    if(i<1||i>L.length)return ERROR;
    if(L.length==MAXSIZE)return ERROR;
    if(i>1&&i<L.length){
    for( j=L.length-1;j>=i-1;j--)
    { L.elem[j+1]=L.elem[j];
    //i和后面的都往后一位
    }
        ++L.length;
        L.elem[i-1]=e;
    }
    if(i==L.length)
    {++L.length;L.elem[i]=e;}
    
    if(i==1)//必须用后插法才可以
    {++L.length;
        for(int k=L.length;k>=0;k--)
        {L.elem[k+1]=L.elem[k];}
        L.elem[i-1]=e;
    }
    return OK;
}
int main()
{int i;
    SqList L;
    InitList(L);
    cin>>L.length;
    for( i=0;i<L.length;i++)
    {cin>>L.elem[i];}
    int e;
    cin>>e;
    ElemType x;
    cin>>x;
    for(i=0;i<L.length;i++)
    {cout<<L.elem[i]<<" ";
    }
    cout<<endl;
   ListInsert(L, e,x);
    
    for(i=0;i<L.length;i++)
    {cout<<L.elem[i]<<" ";}
    
    return 0;
    
}

4.顺序表的删除

Status ListDelete(SqList &L,int i)
{int j;
    if(i<1||i>L.length)return ERROR;
    for(j=i;j>L.length;j++)
        L.elem[j]=L.elem[j+1];
    --L.length;
    return OK;
}

int main()
{
    SqList L;
    InitList(L);
    cin>>L.length;
    for(int j=0;j<L.length;j++)
    {cin>>L.elem[j];}
    int i;
    cin>>i;
    for(int j=0;j<L.length;j++)
    {cout<<L.elem[j]<<" ";}
    cout<<endl;
    ListDelete(L, i);
    for(int j=0;j<L.length;j++)
    {cout<<L.elem[j]<<" ";}
    return 0;
   
}

5.顺序表的合并

按从小到大排列

void MergeList(SqList LA,SqList LB,SqList &LC)
{
    int *pa,*pb,*pc,*pa_last,*pb_last;
    LC.length=LA.length+LB.length;//新表长度为两表长度之和
    LC.elem=new ElemType[LC.length];//分配内存
    pc=LC.elem;
    pa=LA.elem;
    pb=LB.elem;
    pa_last=LA.elem+LA.length-1;//指针指向la最后一个元素
    pb_last=LB.elem+LB.length-1;//指针指向lb最后一个元素
    while((pa<=pa_last)&&(pb<=pb_last))
    {
        if(*pa<=*pb)
            *pc++=*pa++;
        else *pc++=*pb++;
    }
    while(pa<=pa_last) *pc++=*pa++;//依次摘取其中值比较小的一个
    while(pb<=pb_last) *pc++=*pb++;
        
    }
    
int main()
{
    SqList LA;
    InitList(LA);
    cin>>LA.length;
    for(int i=0;i<LA.length;i++)
    {cin>>LA.elem[i];}
    SqList LB;
    InitList(LB);
    cin>>LB.length;
    for(int i=0;i<LB.length;i++)
    {cin>>LB.elem[i];}
SqList LC;
    InitList(LC);
MergeList(LA,LB,LC);
for(int i=0;i<LC.length;i++)
{cout<<LC.elem[i]<<" ";}
    return 0;
}

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值