C实现线性表——顺序表

1.创建顺序线性表需要进行以下步骤:

  • 定义线性表元素类型:定义线性表的每个元素所具有的属性,如类型、数据域等。

  • 定义线性表结构:定义线性表的存储结构。顺序表采用一段连续的存储单元存储数据元素,因此需要定义一个数组来存储数据元素。

  • 初始化线性表:对线性表进行初始化,包括确定线性表的长度、分配存储空间、初始化数组元素等。

  • 插入元素:插入元素时需要先确定插入位置,然后将插入位置之后的元素依次向后移动一位,最后将新元素插入到插入位置处。

  • 删除元素:删除元素时先确定删除位置,然后将删除位置之后的元素依次向前移动一位,最后将最后一个元素删除。

  • 查找元素:可以按位查找操作,获取表中第i位置的元素的值。也可以按值查找操作,在表中查找具有给定关键字值的元素。

以上是创建顺序线性表的主要步骤,不同的编程语言实现方式可能会有所不同。

2.顺序表的定义:

  静态分配:

#define MaxSize 50
typedef struct {
    int data[MaxSize];
    int length;
}SqList;

  动态分配:

#define InitSize 100
typedef struct {
    int *data;
    int MaxSize,length;
}SeqList;

   C的初始化动态分配语句为:

L.data = (int *)malloc(sizeof(int)*InitSize);

   C++的初始化动态分配语句为:

L.data = new int[InitSize];

3.顺序表的基础操作:

插入操作:插入元素时需要先确定插入位置,然后将插入位置之后的元素依次向后移动一位,最后将新元素插入到插入位置处。

bool ListInsert(SqList &L,int i,int e){
    if(i<1||i>L.length+1)
        return false;
    if(L.length>=InitSize)
        return false;
    for(int j=L.length;j>=i;j--){
        L.data[j]=L.data[j-1];
    }L.data[i-1] = e;
    L.length++;
    return true;
}

删除操作:删除元素时先确定删除位置,然后将删除位置之后的元素依次向前移动一位,最后将最后一个元素删除。

bool ListDelete(SqList &L,int i,int &e) {
    if(i<1||i>L.length)
        return false;
    e = L.data[i-1];
    for(int j=i;j

按值查找:在顺序表中查找第一个元素值等于e的元素,并返回其位序。

bool LocateElem(SqList L,int &e){
    for(int i=0;i

4.完整代码:

#include 

using namespace std;

#define InitSize 100


//定义顺序表结构体
typedef struct{
    int *data;
    int length;
}SqList;

//顺序表的初始化
bool InitList(SqList &L){
    L.data = (int *)malloc(sizeof(int)*InitSize);
    if(!L.data)
        return true;
    L.length = 0;
    return true;
}

//顺序表的按值查找
bool LocateElem(SqList L,int &e){
    for(int i=0;iL.length)
        return false;
    e=L.data[i-1];
    return true;
}

//顺序表的插入
int ListInsert(SqList &L,int i,int e){
    if(i<1||i>L.length+1)
        return 0;
    if(L.length>=InitSize)
        return -1;
    for(int j=L.length;j>=i;j--){
        L.data[j]=L.data[j-1];
    }L.data[i-1] = e;
    L.length++;
    return 1;
}

//顺序表的按位插入(适用于初始插入部分数据)
bool ElemInsert(SqList &L,int n) {
    if(n<1||n>InitSize)
        return false;
    for(int i=0;iL.length)
        return 0;
    e = L.data[i-1];
    for(int j=i;j

你可能感兴趣的:(c语言,算法,数据结构)