#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);
}
07-18
1510
