顺序结构存储的线性表

定义一个采用顺序结构存储的线性表,设计算法完成下面的工作:
1、删除元素在[x, y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1);
2、将所有奇数移到所有偶数的前面,要求算法的时间复杂度为O(n),空间复杂度为O(1)。
main.cpp
#include
#include “list.h”
using namespace std;

int main()
{
//初始化数组 来导入顺序表
int n;
int B[Max];
printf(“请输入多少个数据(0-50)\n”);
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&B[i]);

    Sqlist *A;


    CreatList(A,B,n);

    PrintList(A);

    if(ListEmpty(A))
            printf("为空\n");
    else printf("不为空\n");

    int x;
    printf("输入查看指定元素的位置:");
    scanf("%d",&x);
    printf("位置索引:%d\n",PrintX(A,x-1));

    printf("输入插入的索引和数值:\n");
    int insertx;
    int insertindenx;
    scanf("%d %d",&insertx,&insertindenx);
    if(InsertInt(A,insertindenx,insertx)==true)
    {
            printf("添加成功\n");
    }else printf("添加不成功");

    PrintList(A);

    int a , b;
    printf("请输入删除的x和y:");
    scanf("%d %d",&a,&b);
    if(Delected(A,a,b)==false)
    {
            printf("wrong");
    }else
    {
            printf("true");
    }

    PrintList(A);


    printf("排序完之后\n");
    QuickSort(A);
    PrintList(A);

     ListFree(A);
    return 0;

}
list.h
#ifndef LIST_H_INCLUDED
#define LIST_H_INCLUDED
#include<stdlib.h>
#include
#include
#define Max 50
typedef struct
{
int date[Max];
int length;
}Sqlist;
void CreatList(Sqlist *&L,int a[],int n);
void PrintList(Sqlist *L);
bool ListEmpty(Sqlist *L);
int PrintX(Sqlist *L,int x);
bool InsertInt(Sqlist *&L,int i,int num);
void ListFree(Sqlist *&L);
bool Delected(Sqlist *&L,int x,int y);
void QuickSort(Sqlist *&L);
#endif // LIST_H_INCLUDED
list.cpp
#include"list.h"

//将数组导入下顺序表
void CreatList(Sqlist *&L,int a[],int n)
{
int i=0,k=0;
L=(Sqlist *)malloc(sizeof(Sqlist));
while (i<n)
{
L->date[k]=a[i];
k++;i++;
}
L->length=k;
}

//打印顺序表
void PrintList(Sqlist *L)
{
for(int i=0;ilength;i++)
printf("%d ",L->date[i]);
printf(“顺序表长度:%d\n”,L->length);
}

//是否为空
bool ListEmpty(Sqlist *L)
{
return (L->length==0);
}

//指元素的位置
int PrintX(Sqlist *L,int x)
{
int i=0;
while (ilength && L->date[i]!=x)
i++;
if(i>=L->length)
return 0;
else
return i+1;
}

//指定位置擦插入一个元素
bool InsertInt(Sqlist *&L,int i,int num)
{
int j;
if( i < 1 || i >= L->length+1)
return false;
i–;
for(j=L->length;j>i;j–)
L->date[j]=L->date[j-1];
L->date[i]=num;
L->length++;
return true;
}
void ListFree(Sqlist *&L)
{
free(L);
}
//删除[x,y]之间元素
bool Delected(Sqlist *&L,int x,int y)
{
if(x < 1 || y > L->length )
return false;
x–;y–;
int num=y-x;
for(int i=x;ilength-1;i++)
{
L->date[i]=L->date[i+num+1];
}
L->length=L->length-num-1;
return true;
}
void QuickSort(Sqlist *&L)
{
int i=-1;
for(int j=0;jlength;j++)
{
if(L->date[j]%2!=0)
{
int x=L->date[j];L->date[j]=L->date[i+1];L->date[i+1]=x;
i++;
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值