c语言顺序表实现

顺序表是程序员在编程中会经常用到的数据结构,简单来说,顺表就是用数组来存储

数据和数据与数据之间的联系。

#pragma once
#include<stdio.h>
#include<malloc.h>

typedef int ElemType; //假定线性表的元素类型为整型
#define LIST_SIZE 1024 //假定线性表长度是1024
#define TRUE 1
#define FALSE 0
typedef struct {
    ElemType data[LIST_SIZE];
    int last; //指向最后一个节点的位置
}SequenList;

SequenList *lptr;

sequenceList.h

#include "sequece.h"
#include <iostream>
using namespace std;

//初始化
SequenList *InitSeq(void) {
    SequenList *pList;
    pList =(SequenList*) malloc(sizeof(SequenList));
    if (pList!=NULL) {
        pList->last = 0;//初始化成功,且长度为0
    }
    return pList;
}


//求长度:求线性表中的元素个数
int GetSizeSeq(SequenList* pList) {
    return pList->last;
}

//取元素:取给定位置的元素值
//pList:目标元素顺序表,获取元素的下标:pos, e:将元素值放入
int GetElemSqList(SequenList*pList, int pos, ElemType *e) {
    if (pos<0 || pos>pList->last) {
        return FALSE;
    }
    if (pList->last <= 0) {
        return FALSE;
    }
    //说明此时pos在0--n之间
    *e = pList->data[pos];
    return TRUE;
}

//查元素:查找给定元素的位置
//相同值取第一个
//返回值:-1表示没有找到,否则返回带查找元素的角标
//pList:传入的数组顺序表,key比对值
int LocateElemSeqList(SequenList*pList, ElemType key) {
    for (int i = 0; i < pList->last; ++i) {
        if (pList->data[i] == key) {
            return i;
        }
    }
    return -1;
}

//插入元素:在指定位置插入元素
//插入的位置为K:k:0--n-1
//顺序表:不满
//pList:目标顺序表,x待插入的元素,k插入的位置
int  InsertElemSqList(SequenList*pList, ElemType x, int k) {

    //顺序表尚未填满
    if (pList->last >= LIST_SIZE - 1)
    {
        return FALSE;
    }
    //表明K是有效位置
    if (k<0 || k>(pList->last+1)) {
        return FALSE;
    }
    for (int j = pList->last; j >= k; j--) {
        pList->data[j + 1] = pList->data[j];
    }
    pList->data[k] = x;
    pList->last++;
    return TRUE;
}

//删除:删除指定位置的元素或者删除给定的值
//pList:目标数组,k表示需要删除的位置
int DelElemSeqList(SequenList*pList, int k) {
    if ((k >= 0 && k <= pList->last-1) && (pList->last != 0)) {
        for (int j = k; j <= pList->last-1; j++) {
            pList->data[j] = pList->data[j + 1];
        }
        pList->last--;
        return TRUE;
    }
    return FALSE;
}

//遍历元素:从头到尾
void showSeqList(SequenList*pList) {
    for (int i = 0; i < pList->last; ++i) {
        printf("%d ", pList->data[i]);
    }
}

int main()
{
    lptr = InitSeq(); 
    if (lptr) {
        //todo:继续使用这个顺序表
        for (int i = 0; i < 10; ++i) {
            InsertElemSqList(lptr,i,i);

        }
        cout << endl;
        cout << "length=" << GetSizeSeq(lptr) << endl;
        printf("************\n");
        showSeqList(lptr);
        DelElemSeqList(lptr, 9);
        printf("************\n");
        showSeqList(lptr);
        cout << endl;
        cout << "length=" << GetSizeSeq(lptr) << endl;
        int pos = LocateElemSeqList(lptr, 6);
        cout << "元素6位置" << pos << endl;
    }
    else {
        //to do
    }

}

main.c