考研数据结构复习之线性表

来源:互联网 发布:ubuntu u盘挂载 编辑:程序博客网 时间:2024/05/22 15:37

线性表之顺序表学习

#pragma once#define MaxListSize 100typedef int DataType;class SeqListTest{public:    SeqListTest();    ~SeqListTest();};typedef struct{    DataType list[MaxListSize];    int length;}SeqList;void InitList(SeqList *L);bool ListEmpty(SeqList L);int GetElemByNum(SeqList L, int i, DataType *e);int GetLocateElem(SeqList L, DataType e);int InsertList(SeqList *L, int i, DataType e);int DeleteList(SeqList *L, int i, DataType *e);int ListLength(SeqList L);void ClearList(SeqList *L);void PrintList(SeqList *L);

#include "SeqListTest.h"#include<iostream>using namespace std;SeqListTest::SeqListTest(){}SeqListTest::~SeqListTest(){}/*线性表初始化正确方法*/void InitList(SeqList * L){    L->length = 0;}/*线性表初始化错误方法void InitList(SeqList  L){    L.length = 0;}*//*这里的错误是因为初始化的时候需要注意到L的本身需要改变,可以使用指针,或者是引用类型.引用类型的代码如下:void InitList(SeqList  &L){    L.length = 0;}只需记住:不需要修改表L本身的时候就可以不用指针或者引用类型,像查询是否为空,只是得到数据(顺序表的长度),而不是修改就可以直接使用例如bool ListEmpty(SeqList L)的传参形式。这是其实也是参数的传递的按照值传递和引用传递的区别。不清楚的可以回去看一下教材。再补充一点:void InitList(SeqList  &L){    L.length = 0;}初始化的时候----使用时:    SeqList L;    InitList(L);void InitList(SeqList * L){    L->length = 0;}初始化的时候----使用时:    SeqList L;    InitList(&L);*/bool ListEmpty(SeqList L){    if (L.length==0)    {        return true;    }    return false;}/*按照序号来查找元素*/int GetElemByNum(SeqList L, int i, DataType * e){    if (ListEmpty(L))    {        return -1;    }    else if (i<1&&i>L.length)    {        return -1;    }    else    {        *e = L.list[i - 1];        return 1;    }}/*查找线性表中元素所在的位置*/int GetLocateElem(SeqList L, DataType e){    for (int i = 0; i <L.length; i++)    {        if (L.list[i]==e)        {            return i + 1;        }    }    return -1;}/*往线性表中插入数据(1)判断线性表是否满,插入位置是否合理,可插入的位置注意到第一个和最后一个*/int InsertList(SeqList * L, int i, DataType e){    int j;    if (L->length==MaxListSize)    {        return -1;    }    /*插入位置不合法*/    else if(i<1&&i>L->length+1)    {        return -1;    }    else    {        for ( j = L->length; j >i; j--)        {            L->list[j ] = L->list[j-1];        }        L->list[i-1] = e;        L->length = L->length + 1;        return 1;    }}/*删除线性表中的元素并且将删除的元素的值赋给e(1)先判断线性表是否为空(2)删除位置是否合法*/int DeleteList(SeqList * L, int i, DataType * e){    int j;    if (ListEmpty(*L))    {        return -1;    }    else if (i<1&&i>L->length)    {        return -1;    }    else    {        *e=L->list[i - 1];        for ( j= i; j< L->length; j++)        {            L->list[j - 1] = L->list[j];        }        L->length = L->length - 1;        return -1;    }}int ListLength(SeqList L){    return L.length;}void ClearList(SeqList * L){    L->length = 0;}void PrintList(SeqList * L){    for (int i = 0; i < L->length; i++)    {        cout << L->list[i] << " ";    }    cout << endl;}

测试main:

int main() {    SeqList L;    InitList(&L);    InsertList(&L, 1, 1);    InsertList(&L, 2, 2);    InsertList(&L, 3, 3);    InsertList(&L, 4, 4);    InsertList(&L, 5, 5);    PrintList(&L);    cout << ListLength(L) << endl;    DataType e;    DeleteList(&L, 1, &e);    cout << e << endl;    PrintList(&L);    cout << GetLocateElem(L, 3) << endl;    GetElemByNum (L,2,&e);    cout << e << endl;    cout << ListLength(L) << endl;    system("PAUSE");    return 0;    }

这里写图片描述