定义一个采用顺序结构存储的线性表,设计算法完成下面的工作:
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++;
}
}
}