数据结构学习日记1:实现一个简单的线性表功能(顺序存储方式)

数据结构:

一个简单的线性表的实现

  学习了数据结构有一段时间了,那是半年前老师课堂上讲的,最后由于一些原因,没能听到最后,前几天在写一些算法的时候,发现自己的数据结构还是太渣了,因此便又拿起了那本很有价值的数据结构的书,重新来啃这本厚厚的书,数据结构在我们编程中是非常的重要的,希望这次的学习能有一个好的开头,并且能在这个过程中有所得吧!

下面是我写的一个简单的线性表的实现:

  

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

// MyList.cpp : Defines the entry point for the console application.
//

#define    MAXCOUNT 50
#define ERROR 0
#define OK 1
#define YES 2
#define NO 3
typedef int ElemType;
typedef int Status;


typedef struct
{
    int length;
    ElemType data[MAXCOUNT];
}MyList;


//初始化一个线性表
void InitList(MyList *list,int length)
{

    for (int i = 0; i<length; i++)
    {
        list->data[i]= i;
    }
    list->length = length;
}


//判断一个线性表是否为空
Status ListEmety(MyList list)
{
    if (list.length == 0)
    {
        return YES;
    }

    else
    {
        return NO;
    }
}

//获取一个线性表中的指定的元素
Status GetElem(MyList list, int i, ElemType *e)
{
    if (i>list.length||i<1)
    {
        return ERROR;
    }

    *e = list.data[i];
    return OK;
}

//清空一个线性表
void ClearList(MyList *list)
{
    for (int i = 0; i < list->length; i++)
    {
        list->data[i] = NULL;
    }
    list->length = 0;
}

//查找一个值是否与线性表中的数据相等
Status ExistElem(MyList list,ElemType e)
{
    for (int i = 0; i < list.length; i++)
    {
        if (e == list.data[i])
        {
            return YES;
        }
    }

    return NO;
}

//放回表中数据的个数
int ListLength(MyList list)
{
    return list.length;
}

//插入一个数据
Status InsertList(MyList *list,int x,ElemType e)
{
    if (list->length >= MAXCOUNT||x>=MAXCOUNT||x<=0)
    {
        return ERROR;
    }

    //移动元素
    for (int i = list->length; i >= x - 1; i--)
    {
        list->data[i] = list->data[i - 1];
    }
    list->data[x - 1] = e;
    list->length++;
    return OK;
}

//删除一个数据
Status DeleteElem(MyList *list, int x, ElemType *e)
{
    if (list->length == 0 || x <= 0 || x > MAXCOUNT)
    {
        return ERROR;
    }
    
    *e = list->data[x - 1];

    for (int i = x - 1; i < list->length - 1; i++)
    {
        list->data[i] = list->data[i + 1];
    }


    list->length--;
    return OK;
}

int main()
{
    //获取状态的信息
    Status status;

    //新建一个线性表
    MyList list;
    //MyList *p;
    //p= &list;
    //InitList(p);//指针的方式
    InitList(&list,20);


    ElemType value;
    //ElemType *e;
    //e = &value;
    //status = GetElem(list,19,e);   //指针的方式
    status= GetElem(list,19,&value);
    cout << "status:" << status << "\n" << "values:" << value << endl;

    //判断是否存在3
    ElemType e = 3;
    Status stats;
    stats = ExistElem(list,e);
    if (stats == 2)
    {
        cout << "存在" << endl;
    }
    else if (stats == 3)
    {
        cout << "不存在" << endl;
    }
    else
    {
        cout << "程序有错误" << endl;
    }


    //插入一个数据
    Status st;
    st = InsertList(&list,3,99);
    cout << st << endl;
    cout << list.data[2] << endl;
    cout << ListLength(list) << endl;


    //删除一个数据
    Status ss;
    ElemType ee;
    ss = DeleteElem(&list, 3, &ee);
    cout << ss << endl;
    cout << ee << endl;
    cout << ListLength(list) << endl;

    cin.get();

    return 0;
}

 

  代码中存在一些没有完善的地方,大致的功能已经实现,在后续的学习中会逐步完善。

posted @ 2016-11-17 00:22  Recho  阅读(586)  评论(0编辑  收藏  举报