数据结构-定长顺序表

        顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

用定长顺序表来实现基本操作代码如下:

SeqList.cpp:

#include<stdio.h>
#include"SeqList.h"
#include<assert.h>

//初始化
void InitList(PSeqList pl)
{
    assert(pl != NULL);
    if (pl == NULL)                               //判空
    {
        return;
    }
    pl->cursize = 0;                             //初始化长度为0
}

//插入
int InsertPos(PSeqList pl, int pos, ELEM_TYPE val)
{
    if (pl == NULL)                  //判空
    {
        return -1;
    }
                                                                                            // pos < 0 结构不存在;pos>pl->cursize 位置超出长度;判满
    if(pos <0 || pos >pl->cursize || IsFull(pl))
    {
        return -1;
    }
    for (int i = pl->cursize - 1; i >= pos; i--)
    {
        pl->elem[i + 1] = pl->elem[i];                                    //将数据往后挪
    }
    pl->elem[pos] = val;                                                       //插入值
    pl->cursize++;                                                                //长度相应边长
    return 1;
}

//按位置删除
int DeletePos(PSeqList pl, int pos)
{
    if (pos < 0 || pos >pl->cursize)                                  //判断删除是否合法
    {
        return -1;
    }
    for (int i = pos + 1; i <= pl->cursize; i++)                //将pos之后的数据往前挪
    {
        pl->elem[i - 1] = pl->elem[i];                               //数据迁移
    }
    pl->cursize--;                                                            //相应的长度减小
    return 1;
}

//按元素删除
int DeleteKey(PSeqList pl, ELEM_TYPE KEY)
{
    if (pl == NULL)
    {
        return 0;
    }
    //int i = 0;
    //for (i; pl->elem[i] != KEY; i++)                    //找到KEY的位置
    //{
    //    if (i == pl->cursize - 1)
    //    {
    //        return -1;
    //    }
    //}
    int index = Search(pl, KEY);                      //利用Search函数找到该元素的位置
    if (index < 0)
    {
        return -1;
    }
    for (int j = index; j < pl->cursize; j++)
    {
        if (pl->elem[j] == KEY)
        {
            DeletePos(pl, j);
            j--;
        }
    }
    return 1;
}

//查找元素位置
int Search(PSeqList pl, ELEM_TYPE KEY)
{
    int rt = -1;
    if (pl != NULL)
    {
        for (int i = 0; i < pl->cursize; i++)
        {
            if (KEY == pl->elem[i])
            {
                rt = i;
                break;
            }
        }
    }
    return rt;
}

//判断结构是否满
bool IsFull(PSeqList pl)
{
    return pl->cursize == Arrary_SIZE;
}
//显示函数
void Show(PSeqList pl)
{
    for (int i = 0; i < pl->cursize; i++)
    {
        printf("%d", pl->elem[i]);
    }
    printf("\n");
}
void Clear(PSeqList pl)
{
    pl->cursize = 0;
}
void Destory(PSeqList pl)
{
    Clear(pl);
}

头文件SeqList.h:

#define Arrary_SIZE 5
typedef int ELEM_TYPE;
typedef struct SeqList
{
    ELEM_TYPE elem[Arrary_SIZE];
    int cursize;
}SeqList,*PSeqList;

void InitList(PSeqList pl);
int InsertPos(PSeqList pl, int pos, ELEM_TYPE val);
int DeletePos(PSeqList pl, int pos);
int DeleteKey(PSeqList pl, ELEM_TYPE KEY);
int Search(PSeqList pl, ELEM_TYPE KEY);
bool IsFull(PSeqList pl);
void Show(PSeqList pl);
void Clear(PSeqList pl);
void Destory(PSeqList pl);
 

主函数main():(包含一些基本操作)

#include<stdio.h>
#include<stdlib.h>
#include"SeqList.h"

int main()
{
    SeqList sl;
    InitList(&sl);
    for (int i = 0; i < 4; i++)
    {
        InsertPos(&sl, i, 5);
    }
    Show(&sl);
    InsertPos(&sl, 2, 8);
    Show(&sl);
    DeletePos(&sl,4);
    Show(&sl);
    DeleteKey(&sl, 5);
    Show(&sl);

    for (int i = 0; i < 6; ++i)
    {
        int rt = InsertPos(&sl, i, i + 1);
        printf("rt %d:%d\n", i + 1, rt);
    }
    Show(&sl);
    DeletePos(&sl, 2);
    int rt1 = InsertPos(&sl, 0, 4);
    printf("rt %d:%d\n", 7, rt1);
    Show(&sl);
    DeleteKey(&sl, 4);
    Show(&sl);
    Clear(&sl);
    int rt2 = InsertPos(&sl, 1, 10);
    printf("rt %d:%d\n", 8, rt2);
    int rt3 = InsertPos(&sl, 0, 20);
    printf("rt %d:%d\n", 9, rt3);
    int rt4 = InsertPos(&sl, 0, 30);
    printf("rt %d:%d\n", 10, rt4);
    Show(&sl);
    Destory(&sl);
    system("pause");
}

猜你喜欢

转载自blog.csdn.net/C_f_hhh/article/details/83828073
今日推荐