线性表顺序存储结构上的基本运算:增删查改

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/better12038/article/details/80616710
/////////seqlist.h
#pragma once
#ifndef __SEQ_LIST_H__
#define __SEQ_LIST_H__

#include <assert.h>
#include <stdio.h>
#include <windows.h>

typedef int DataType;

#define MAX_SIZE (100)

typedef struct SeqList
{
    DataType array[MAX_SIZE];
    int size;

}   SeqList;

//初始化
void SeqListinit(SeqList *pSL);


//增
void PushBack(SeqList *pSL, DataType data);
void PushFront(SeqList *pSL, DataType data);
void Insert(SeqList *pSL, int pos, DataType data);

//删
void PopBack(SeqList *pSL);
void PopFront(SeqList *pSL);
void Erase(SeqList *pSL, int pos);

void Remove(SeqList *pSL, DataType data);
void RemoveAll(SeqList *pSL, DataType data);

//查
int Find(SeqList *pSL, DataType data);

//改
void Update(SeqList *pSL, int index, DataType data);

int SeqListEmpty(const SeqList *pSL);

int SeqListFull(const SeqList *pSL);


int SeqListPrint(SeqList *pSL);
`
void SeqListDestroy(SeqList * pSL);

#endif
//////////////seqlist.c
#include "seqlist.h"

//初始化
void SeqListinit(SeqList *pSL)
{
    assert(pSL != NULL);
    pSL->size = 0;
}

//尾插
void PushBack(SeqList *pSL, DataType data)
{
    Insert(pSL, pSL ->size, data);


}
//头插
void PushFront(SeqList *pSL, DataType data)
{
    Insert(pSL, 0, data);
}

//按位置插
void Insert(SeqList *pSL, int pos, DataType data)
{
    assert(pSL != NULL);
    assert(pSL->size < MAX_SIZE);
    assert(pos >= 0 && pos <= MAX_SIZE);
    int i;
    for (i = 0; i < pSL->size - pos; i++)
    {
        pSL->array[pSL->size - i] = pSL->array[pSL->size - i - 1];

    }
    pSL->array[pos] = data;
    pSL->size++;
}

//尾删
void PopBack(SeqList *pSL)
{
    Erase(pSL, pSL->size-1);
}

//头删
void PopFront(SeqList *pSL)
{
    Erase(pSL, 0);
}

//按位置删
void Erase(SeqList *pSL, int pos)
{
    assert(pSL != NULL);
    assert(pSL->size > 0);
    int i;
    pSL->size--;
    for (i = 0; i < pSL->size - pos; i++)
    {
        pSL->array[pos + i] = pSL->array[pos + i + 1];
    }
}

//找
int Find(SeqList *pSL, DataType data)
{
    int i;
    for (i = 0; i < pSL->size; i++)
    {
        if (pSL->array[i] == data)

            return i;
    }
    return -1;
}

//按数据删第一个遇到的
void Remove(SeqList *pSL, DataType data)
{
    int index = Find(pSL, data);
    if (index != -1)
    {
        Erase(pSL, index);
    }
}

//按数据删所有
void RemoveAll(SeqList *pSL, DataType data)
{
    int index;
    while ((index = Find(pSL, data)) != -1)
    {
        Erase(pSL, index);
    }

}

//改
void Update(SeqList *pSL, int index, DataType data)
{
    assert(pSL != NULL);
    assert(index < pSL->size);
    pSL->array[index] = data;

}

//判空,空:1;非空:0
int SeqListEmpty(const SeqList *pSL)
{
    return pSL->size == 0 ? 1 : 0;
}
//判满,满:1;未满:0
int SeqListFull(const SeqList *pSL)
{
    return pSL->size == MAX_SIZE ? 1 : 0;
}

//显示
int SeqListPrint(SeqList *pSL)
{
    int i = 0;
    for (i = 0; i < pSL->size; i++)
    {
        printf("%d\t", pSL->array[i]);
    }
    printf("\n");
    return 0;
}

//销毁
void SeqListDestroy(SeqList * pSL)
{
    assert(pSL != NULL);
    pSL->size = 0;
}


////////////////test.c
#include "seqlist.h"

int main()
{
    SeqList s1;
    SeqListinit (&s1);

    PushBack(&s1, 17);
    PushBack(&s1, 18);
    PushBack(&s1, 19);
    SeqListPrint(&s1);

    Insert(&s1, 2, 20);
    Insert(&s1, 3, 120);
    SeqListPrint(&s1);

    PushFront(&s1, 4);
    SeqListPrint(&s1);

    Erase(&s1, 3);
    SeqListPrint(&s1);

    PopBack(&s1);
    SeqListPrint(&s1);

    PopFront(&s1);
    SeqListPrint(&s1);

    Remove(&s1, 17);
    SeqListPrint(&s1);

    Update(&s1, 0, 130);
    SeqListPrint(&s1);

    RemoveAll(&s1, 130);
    SeqListPrint(&s1);

    SeqListDestroy(&s1);
    system("pause");
    return 0;

}

猜你喜欢

转载自blog.csdn.net/better12038/article/details/80616710