秋逸

第一次写,实现了快排、头插、尾插、查找之类的方法

#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;
}
顺序存储结构-数据结构
: 杨秋逸
https://yangqiuyi.com/blog/算法/数据结构/顺序存储结构-数据结构/