第一次写,实现了快排、头插、尾插、查找之类的方法
#include <bits/stdc++.h>
#define MAXSIZE 1005
using namespace std;
typedef struct
{
int data[MAXSIZE];
int len;
} SL, *SP;
void inits(SP list)
{
for (int i = 0; i < MAXSIZE; i++)
{
list->data[i] = 0;
}
list->len = 0;
}
void dump(SL list)
{
for (int i = 0; i < list.len; i++)
{
printf("%5d", list.data[i]);
}
cout << endl;
}
void insert(SP li, int position, int e)
{
if (li->len >= position)
{
for (int i = li->len; i >= position; i--)
{
li->data[i] = li->data[i - 1];
}
li->data[position] = e;
li->len++;
}
else
{
cout << "error: sqlist length is too short.";
}
}
void headInsert(SP li, int e)
{
insert(li, 0, e);
}
void tailInsert(SP li, int e)
{
insert(li, li->len, e);
}
void quickSort(SP li, int le, int ri)
{
int i = le, j = ri, mid = li->data[le + ri >> 1];
while (i <= j)
{
while (li->data[i] < mid)
i++;
while (li->data[j] > mid)
j--;
if (i <= j)
{
swap(li->data[i], li->data[j]);
i++, j--;
}
}
if (le < j)
quickSort(li, le, j);
if (ri > i)
quickSort(li, i, ri);
}
void qsort(SP li)
{
quickSort(li, 0, li->len - 1);
}
void del(SP li, int po)
{
if (po < 0 || po > li->len)
{
cout << "delete an error position." << endl;
return;
}
for (int i = po; i < li->len - 1; i++)
{
swap(li->data[i], li->data[i + 1]);
}
li->len--;
}
void reverseList(SP li)
{
for (int i = 0, j = li->len - 1; i < j; i++, j--)
{
swap(li->data[i], li->data[j]);
}
}
bool findList(SL li, int e)
{
for (int i = 0; i < li.len; i++)
{
if (li.data[i] == e)
return true;
}
return false;
}
void deleteNumber(SP li, int num)
{
for (int i = 0; i < li->len; i++)
{
if (li->data[i] == num)
{
del(li, i);
i--;
}
}
}
void unique(SP li)
{
for (int i = 0; i < li->len; i++)
{
int t = li->data[i];
for (int j = i + 1; j < li->len; j++)
{
if (li->data[j] == t)
{
del(li, j);
j--;
}
}
}
}
int main()
{
SL list;
inits(&list);
for (int i = 0; i < 10; i++)
{
headInsert(&list, i); //头插
headInsert(&list, i); //插两次,为了演示除重以及删除y值
}
dump(list); //打印
tailInsert(&list, 20); //尾插
dump(list);
insert(&list, 0, 12); //随便插
dump(list);
del(&list, 2);
dump(list);
reverseList(&list); //倒置
dump(list);
qsort(&list); //快排
dump(list);
for (int i = 0; i < 5; i++)
{
tailInsert(&list, 10); //插入重复序列
}
dump(list);
deleteNumber(&list, 2); //删除所有值为2的元素
dump(list);
unique(&list); //除重
dump(list);
return 0;
}