数据结构:顺序表


[success]数据结构上课上的挺迷的,所以打算自己把算法都用c++写一遍,这样可以方便以后查找,今天搞了一上午才写出第一个算法。。。[/success]

顺序表其实很简单,就是一个数组,只是把这个数组放到结构体里了,主要的几个函数也很简单,包括查找,插入,删除。

一些细节部分都会在代码里面说明,所以直接贴代码了:

#include "pch.h"
#include <iostream>
//c++实现顺序表
#define MAXSIZE 100
#define OK 1
#define ERROR 0
using namespace std;
typedef struct
{
    int *data;
    int	length;
}spList;
//初始化顺序表
int InitList(spList &L) //这里&是引用,就是这L和传入的是同一个东西,如果不加的话,就相当于拷贝一个副本
{	//这里传的是*L也就是那个新创建结构体(因为返回的是地址,所以需要用到指针保存数据,*L就相当于结构体变量)
    L.data = new int[MAXSIZE];//新建一个int类型的数组
    if (!L.data) return ERROR;//如果数组创建失败返回错误
    L.data[0] = 1;
    L.data[1] = 2;
    L.data[2] = 3;//先给几个初始值
    L.length = 3;
    return OK;
}
//获取顺序表的取值
int GetElem(spList L, int i,int &e)
{
    if (i<0 || i>L.length) return ERROR;
    e = L.data[i - 1];
    return OK;
}

//顺序表的查找
int LocatElem(spList L,int a)
{
    for (int i = 0; i < L.length; i++)
        if (a == L.data[i]) return i + 1;
    return 0;

}
//顺序表的插入
int ListInsert(spList &L, int i,int e)
{
    if (i<1 || i>L.length + 1) return ERROR;//这里i是从1开始的,我们只能插入1-L.length
    if (L.length == MAXSIZE) return ERROR;//存储空间已满
    for (int j = L.length - 1; j >=i-1; j--)//这里我们顺序表从0开始,所以也就是说把 i-1到总长度-1的这一段数据集体往后移
        L.data[j + 1] = L.data[j];//移动数据
    L.data[i-1] = e;
    ++L.length;
    return ERROR;
}
//打印顺序表
void PrintList(spList L) 
{
    for (int i=0; i < L.length; i++)
        cout << L.data[i] << " ";
    cout << endl;
}
//删除顺序表
int ListDelete(spList &L, int i)
{
    if (i<0 || i>L.length) return ERROR;
    for (int j = i; j <= L.length - 1; j++)//删除就是把第i个元素去掉,然后把后面的元素集体往前面移
        L.data[j - 1] = L.data[j];
    --L.length;
    return OK;
}
int main()
{
    spList *L = new spList;//新建一个结构体指针,指向这个结构体
    //这里*L存的指针引用所对应的值(比如*a指向一个变量b=5,那么*a就是这个变量的值5,a就是这个变量的地址,&a是a指针的地址)
    if (!InitList(*L)) return ERROR;
    int a;
    GetElem(*L, 1, a);
    cout << "第一号元素为:" << a<<endl;
    a=LocatElem(*L, 2);
    cout << "2所在的位置为:" << a<<endl;
    ListInsert(*L, 2, 5);
    PrintList(*L);
    ListDelete(*L, 2);
    PrintList(*L);	
}

文章作者: 小游
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小游 !
  目录