线性表-----顺序表
#include <stdio.h>
#define max 10
//顺序表定义
typedef struct Sqlist{
int data[max];
int length;
}Sqlist;
//初始化
void initList(Sqlist &L) {
L.length = 0;
}
//显示所有数据
void display(Sqlist L){
printf("L.length=%d\n",L.length);
for(int i=0;i<L.length;i++)
{
printf("data[%d]=%d\n",i,L.data[i]);
}
}
//求指定元素位置 的数
int getElem(Sqlist L, int p, int &e){
if(p<0||p>=L.length)
return 0;
e=L.data[p];
return 1;
}
//插入数据元素
int insertElem(Sqlist &L, int p, int e) {
if(p<0||p>L.length||L.length>=max)
return 0;
for(int i=L.length-1;i>=p;i--)
{
L.data[i+1]=L.data[i];
}
L.data[p]=e;
L.length++;
return 1;
}
//按元素值查找(返回p)
int findElem(Sqlist L, int e) {
for(int i=0;i<L.length;i++)
{
if(L.data[i]==e)
return i;
}
return 0;
}
//删除数据元素
int deleteElem(Sqlist &L, int p, int &e)
{
if(p<0||p>L.length)
return 0;
e=L.data[p];
for(int i=p;i<L.length;i++)
{
L.data[i]=L.data[i+1];
}
--(L.length);
return 1;
}
//顺序表的元素逆置
void reverse(Sqlist &L)
{
int temp;
for(int i=0;i<L.length;i++)
{
temp=L.data[i];
L.data[i]=L.data[L.length-i];
L.data[L.length-i]=temp;
}
}
//删除下标为i~j的数据元素
void deleteRange(Sqlist &L, int m, int n) {
int i;
for(i=m;i<L.length-n+m;i++)
{
L.data[i]=L.data[i+n-m+1];
}
L.length-=(n-m+1);
}
//快排
void partition(Sqlist &L, int l, int r)
{
if(l>=r)
{
return ;
}
int i=l,j=r-1,temp;
int key=L.data[l];
while(i<j)
{
while(key<=L.data[j]&&i<j)
{
j--;
}
L.data[i]=L.data[j];
while(L.data[i]<=key&&i<j)
{
i++;
}
L.data[j]=L.data[i];
}
L.data[i]=key;
partition(L,l,i);
partition(L,i+1,r);
}
int main()
{
Sqlist L;
for(int i=0;i<10;i++)
{
L.data[i]=9-i;
}
L.length=10;
display(L);
//deleteRange(L, 1, 2) ;
partition(L, 0, 10);
display(L);
}