C语言实现顺序表的基本操作

顺序表通俗来说就是一个有着元素个数记录的数组,在这个数组进行增删查改的操作,顺序表的基本操作练习的是一个人对算法的思想和对一门编程语言的应用,作为计算机编程学习者应该多动手实践,下面是代码

#include<stdio.h>
#pragma warnimg(disable:4996)
typedef int Datatypedef;
#define MAX_arr 10
typedef struct Seqlist{
    Datatypedef arr[MAX_arr];
    size_t size;
}Seqlist, *pSeq;

void intest(pSeq a);//初始化
void poppush(pSeq a, Datatypedef data);//尾插
void poperase(pSeq a);//尾删
void print(pSeq a);//打印
void frontpush(pSeq a, Datatypedef data);//头插
void frontpop(pSeq a);//头删
int search(pSeq a,Datatypedef data);//返回在顺序表中找到第一个data
void EraseAll(pSeq a, Datatypedef data);//删除顺序表中的所有data
void bubblesort(pSeq a);//冒泡排序
void Selsctsort(pSeq a);//选择排序
void Swap(Datatypedef *a, Datatypedef *b);//交换两个数字
void Destroy(pSeq a);//删除顺序表
int BinarySearch(pSeq a, Datatypedef data);



void intest(pSeq a)
{
    if (NULL == a)
    {
        printf("failed to intest\n");
        return;
    }
    a->size = 0;
}
void poppush(pSeq a,Datatypedef data)
{
    if (NULL == a)
    {
        printf("fail to push\n");
        return;
    }
    if (a->size == MAX_arr)
    {
        printf("fail to push\n");
        return;
    }
    a->arr[a->size] = data;
    a->size++;
}
void poperase(pSeq a)
{
    if (NULL == a)
    {
        printf("fail to erase\n");
        return;
    }
    if (a->size == 0)
    {
        printf("fail to erase\n");
        return;
    }
    a->size--;
}
void print(pSeq a)
{
    int i = 0;
    if (NULL == a)
    {
        printf("fail to print\n");
        return;
    }
    for ( i = 0; i < a->size; i++)
    {
        printf("%d ", a->arr[i]);
    }
    printf("\n");
}
void frontpush(pSeq a,Datatypedef data)
{
    int i = 0;
    if (NULL == a)
    {
        printf("fail to push\n");
        return;
    }
    if (a->size == MAX_arr)
    {
        printf("fail to push\n");
        return;
    }
    for ( i = a->size-1; i >=0; i--)
    {
        a->arr[i+1] = a->arr[i];
    }
    a->arr[0] = data;
    a->size++;
}
void frontpop(pSeq a)
{
    int i = 0;
    if (NULL == a)
    {
        printf("fail to pop\n");
        return;
    }
    if (a->size == 0)
    {
        printf("fail to pop\n");
        return;
    }
    for (i = 0; i < a->size-1; i++){
        a->arr[i] = a->arr[i+1];
    }
    a->size--;
}
int search(pSeq a, Datatypedef data)
{
    int i = 0;
    if (NULL == a)
    {
        printf("fail to pop\n");
        return -1;
    }
    for (i = 0; i < a->size; i++)
    {
        if (a->arr[i] == data)
            return i;
    }
    return -1;//遍历结束没有找到返回-1
}
void EraseAll(pSeq a, Datatypedef data)
{
    int count = 0;
    int i = 0;
    if (NULL == a)
    {
        printf("fail to erase\n");
        return;
    }
    if (a->size==0)
    {
        printf("fail to erase\n");
        return;
    }
    for (i = 0; i <( a->size); i++)
    {
        if (a->arr[i] == data)
            count++;
        else
            a->arr[i - count] = a->arr[i];
    }
    a->size -= count;
}
void Swap(Datatypedef *a, Datatypedef *b)
{
    Datatypedef t = 0;
    if (NULL == a || NULL == b)
        return;
    t = *a;
    *a = *b;
    *b = t;
}
void bubblesort(pSeq a)
{
    int i = 0, j = 0;
    int flag = 0;
    if (NULL == a)
    {
        printf("fail to sort\n");
        return;
    }
    for (i = 0; i < a->size - 1; i++)
    {
        flag = 0;
        for (j = 0; j < a->size - 1 - i; j++)
        {
            if (a->arr[j]>a->arr[j + 1])
            {
                Swap(&a->arr[j], &a->arr[j + 1]);
                flag = 1;
            }
        }
        if (flag == 0)
            break;
    }
}
void Selsctsort(pSeq a)
{
    int i = 0, j=0,max = 0;
    if (NULL == a)
    {
        printf("fail to sort\n");
        return;
    }
    for (i = 0; i < a->size; i++){
        max = 0;
        for (j = 1; j < a->size - i; j++){
            if (a->arr[j]>a->arr[max])
            {
                max = j;
            }
            Swap(&a->arr[max], &a->arr[a->size - 1 - i]);
        }
    }

}
void Destroy(pSeq a)
{
    if (NULL == a)
    {
        printf("fail to destory\n");
        return;
    }
    a->size = 0;
}
int BinarySearch(pSeq a, Datatypedef data)
{
    int left = 0;
    int right = a->size;
    int mid = 0;
    while (left<right)
    {
        mid = left + ((right - left) >> 1);
        if (data == a->arr[mid])
        {
            return mid;
        }
        else if (data>a->arr[mid])
        {
            left = mid + 1;
        }
        else
        {
            right = mid;
        }
    }
}



int main()
{
    int ret = 0;
    Seqlist a;
    intest(&a);
    poppush(&a, 1);
    poppush(&a, 2);
    poppush(&a, 3);
    poppush(&a, 4);
    poppush(&a, 5);
    print(&a);
    poperase(&a);
    print(&a);
    frontpush(&a, 4);
    frontpush(&a, 3);
    frontpush(&a, 2);
    frontpush(&a, 1);
    print(&a);
    Selsctsort(&a);
    print(&a);

    //测试bubblsort
    //bubblesort(&a);
    //print(&a);

    //EraseAll(&a, 1);
    //print(&a);
    //测试头删
    //frontpop(&a);
    //print(&a);
    //测试search
    //ret = search(&a, 5);
    //printf("%d\n", ret);

}

我是一个初学者,如果有什么错误请大家指出,谢谢。

猜你喜欢

转载自blog.csdn.net/weixin_40909099/article/details/79856854