基本线性结构
顺序表
用变量last记录当前最后一个元素在数组中的位置,即last起一个指针的作用
//当表空时last = -1
typedef struct
{
datatype data[MAXSIZE];
int last;
}SeqList;
//顺序表的初始化
SeqList *init_SeqList()
{
SeqList *L;
L = (SeqList *)malloc(sizeof(SeqList));
//注意别忘了将last置为-1
L->last = -1;
return L;
}
//插入运算
//在表的第i个位置插入一个值为x的元素
*## 插入时需要检查的情况
1. 表是否已满
2. 插入的位置是否正确
3. 正确插入*
int Insert_SeqList(Seqlist *L,int i,datatype x)
{
int j;
if(L->last == MAXSIZE - 1)
{
printf("表满");
return -1;
}
//检查插入位置是否正确,表中的最后一个位置是L->last+1,表后面一个元素是L->last + 2
if(i < 1 || i > L->last + 2)
{
printf("位置错");
return 0;
}
//正确插入,第i个位置即为下标为i-1的数组元素,即将下表从i-1往后移动
for(j = L->last; j >= i-1 ;j++)
{
L->data[j+1] = L->data[j];
}
//将元素x插入进去
L->data[i-1] = x;
//更变last
L->last ++;
return 1;
}
//删除运算
*## 删除时需要检查的情况
1. 删除的位置是否正确
2. 正确删除*
int Delete_SeqList(Seqlist L,int i)
{
int j;
if(i < 1 || i > L->last + 1)
{
printf("不存在第i个元素");
return 0;
}
//从下标为i的元素依次向前移动
for(j = i;j <= L->last;j++)
{
L->data[j-1] = L->data[j];
}
L->last--;
return 1;
}
//按值查找运算
int Location_SeqList(SeqList *L,datatype x)
{
int i;
while(i <= L->last && L->data[i]!= x)
{
i++;
}
//查找失败,返回的是-1
if(i >L->last) return -1;
//查找成功,返回的是存储位置
else return i;
}
顺序表的应用举例
//若当前数据比a1大,则不用改变其与a1的位置,若比a1小,则应该放在a1的前面
void part(SeqList *L)
{
int i,j;
datatype x,y;
x = L->data[0];
for(i = 1;i <= L->last;i++)
{
if(L->data[i] < x)
{
y = L->data[i];
for(j = i-1;j >= 0;j--)
{
L->data[j+1] = L->data[j];
}
L->data[0] = y;
}
}
}
看博主写的比较清晰,就引用了一下嘻嘻嘻
快速排序算法here
快速排序算法每次将比基准大的数放在基准的一边,将比基准小的数放在基准的另一边,每次设置基准i和基准j
void part(SeqList * L)
{
int i = 0,j = L->last;
datatype x;
x = L->data[0];
while(i < j)
{
//如果data[j]的元素比基准大,则j前移
while(data[j] > x && i < j)
{
j--;
}
if(i < j)
{
L->data[i] = L->data[j];
i++;
}
while(data[i] <= x && i < j)
{
i++;
}
if(i < j)
{
L->data[j] = L->data[i];
j--;
}
}
}