1、顺序表静态数组分配内存

#include<stdio.h>
#include <cassert>

#define MaxSize 10
typedef struct {
    int data[MaxSize];//静态数组分配内存
    int length;//顺序表当前长度
}SqList;
void InitList(SqList &L);//初始化顺序表
int  InsertList(SqList &L,int i,int e);//向顺序表位序第i个位置插入数据e
int  DeleteList(SqList &L,int i,int &e);//删除顺序表第i个位置数据并打印出来
int  AlterList(SqList &L,int i,int e);//将顺序表第i个元素改为e;
int  GetList(SqList L,int i);//输出顺序表第i个位置元素,按位查找
int  LocatedElem(SqList L,int e);//按值查找,输出位序
int Length(SqList L);//输出顺序表表长
bool IsEmpty(SqList L);//判断顺序表是否为空
void PrintList(SqList L);//打印顺序表信息

//一些非基本操作
void Reverse(SqList &L);//顺序表元素逆序
void DeleteRange(SqList &L,int i,int j);//删除从i到j这个范围的元素
int Partition(SqList &L);//一次快速排序
void Quick_sort(SqList &L,int l,int r);//快速排序

int main()
{
    SqList L;
    InitList(L);
    PrintList(L);
    Quick_sort(L,0,L.length);
    PrintList(L);
   /* int flag;
    printf("删除flag=%d\n  ",DeleteList(L,1,flag));
    PrintList(L);
    printf("插入flag=%d\n  ",InsertList(L,1,11));
    PrintList(L);
    printf("更改flag=%d\n",AlterList(L,5,55));
    PrintList(L);
    printf("按位查找%d\n",GetList(L,5));
    printf("按值查找%d\n",LocatedElem(L,55));
    printf("顺序表表长%d\n",Length(L));
    printf("是否为空:%d",IsEmpty(L));*/


}
void InitList(SqList &L)
{
    L.length=MaxSize;//顺序表初始长度为0;
    for(int i=0;i<L.length;i++)
        L.data[i]=10-i;
}
int InsertList(SqList &L,int i,int e)//向顺序表位序第i个位置插入数据e
{
    if(i<1||i>L.length+1||L.length==MaxSize)return 0;
    for(int k=L.length;k>=i;k--)
        L.data[k]=L.data[k-1];
    L.data[i-1]=e;
    L.length++;
    return 1;
}
int  DeleteList(SqList &L,int i,int &e)//删除顺序表第i个位置数据并打印出来
{
    if(i<0||i>=L.length)return 0;
    printf("删除顺序表第%d个位置数据:%d\n",i,L.data[i-1]);
    for(int k=i-1;k<L.length-1;k++)
        L.data[k]=L.data[k+1];
    L.length--;
    return 1;
}
int  AlterList(SqList &L,int i,int e)//将顺序表第i个元素改为e;
{
    if(i<0||i>L.length-1)return 0;
    L.data[i-1]=e;return 1;
}
int  GetList(SqList L,int i)//输出顺序表第i个位置元素
{
    if(i<0||i>L.length-1)
    {printf("error");return 0;}
    return L.data[i-1];

}
int  LocatedElem(SqList L,int e)//按值查找,输出位序
{
    for(int i=0;i<L.length;i++)
    {
        if(e==L.data[i])return i+1;
    }
    return 0;
}

int Length(SqList L)//输出顺序表表长
{
    return L.length;
}
bool IsEmpty(SqList L)//判断顺序表是否为空
{
    if(L.length==0)return true;
    return false;
}
void PrintList(SqList L)//打印顺序表信息
{
    printf("打印顺序表信息:\n  ");
    for(int i=0;i<L.length;i++)
    {
        printf("%d\n  ",L.data[i]);
    }
}


void Reverse(SqList &L)//顺序表元素逆序
{
    int i,j,t;
    for(i=0,j=L.length-1;i<j;i++,j--)
    {
        t=L.data[j];
        L.data[j]=L.data[i];
        L.data[i]=t;
    }
}

void DeleteRange(SqList &L,int i,int j)//删除从i到j这个范围的元素
{
    int len=j-i+1;
    for( int k=j+1;k<L.length;k++)
        L.data[k-len]=L.data[k];
    L.length-=len;
}

int  Partition(SqList &L,int l,int r)//快速排序
{
    assert(L.length!=0);

    int p=L.data[l];
    int i=l;int j=r;

    while(i<j)
    {
        while(i<j&&L.data[j]>p)
            --j;
        if(i<j) {
            L.data[i] = L.data[j];
            ++i;
        }
        while(i<j&&L.data[i]<p)
            ++i;
        if(i<j)
        {
            L.data[j]=L.data[i];
            --j;
        }

    }

    L.data[i]=p;
    return i;


}
void Quick_sort(SqList &L,int l,int r)//快速排序
{
    if(l>=r)
        return;
    int index=Partition(L,l,r);
    Quick_sort(L,l,index-1);
    Quick_sort(L,index+1,r);

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值