您的位置:首页 > 其它

【第三周 项目1-顺序表的基本运算】

2016-09-20 17:00 281 查看
程序及代码:

/*

 *Copyright(c)2015级,烟台大学 计算机与控制工程学院

 *All right reserved.

 *文件名称:main.cpp

 *作者:胡馨月

 *完成日期;2016年9月20日

 *版本号;v1.0

 *

 *问题描述:(1)测试“建立线性表”的算法CreateList,为查看建表的结果,需要实现“输出线性表”的算法DispList。

            (2)在已经创建线性表的基础上,求线性表的长度ListLength、求线性表L中指定位置的某个数据元素GetElem、

            查找元素LocateElem的算法都可以实现了。

            (3)插入数据元素ListInsert、删除数据元素ListDelete、初始化线性表InitList、销毁线性表DestroyList

 *输入描述:无

 *程序输出:无

*/

#include <stdio.h>

#include <malloc.h>   //必要的库文件包括

#define MaxSize 50      //Maxsize将用于后面定义存储空间的大小

typedef int ElemType;    //ElemType在不同场合可以根据问题的需要确定,在此取简单的int

typedef struct

{

    ElemType data[MaxSize];

    int length;

}SqList;

//1111

void CreateList(SqList *&L,ElemType a[],int n);

void DisList(SqList *L);

bool ListEmpty(SqList *L);

//2222

int ListLength(SqList *L);

bool GetElem(SqList *L,int i,ElemType &e);

int LocateElem(SqList *L,ElemType e);

//333333

void InitList(SqList *&L);//构造一个空的线性表L

void DestroyList(SqList *&L);//释放线性表L占用的内存空间

bool ListInsert(SqList *&L,int i,ElemType e);//在线性表L中的第i个位置插入元素e;

bool ListDelete(SqList *&L,int i,ElemType e);//在线性表L中删除第i个元素,有e返回删除的值;

void CreateList(SqList *&L,ElemType a[],int n)

{

    int i;

    L=(SqList*)malloc(sizeof(SqList));

    for(i=0; i<n; i++)

        L->data[i]=a[i];

    L->length=n;

}

void DisList(SqList *L)

{

    int i;

    if (ListEmpty(L))

        return;

    for(i=0; i<L->length; i++)

        printf("%d",L->data[i]);

    printf("\n");

}

bool ListEmpty(SqList *L)

{

    return(L->length==0);

}

int ListLength(SqList *L)

{

    return(L->length);

}

bool GetElem(SqList *L,int i,ElemType &e)

{

    if(i<1 || i>L->length)

        return false;

    e=L->data[i-1];

    return true;

}

int LocateElem(SqList *L, ElemType e)

{

    int i=0;

    while(i<L->length && L->data[i]!=e)

        i++;

    if(i>=L->length)

        return 0;

    else

        return i+1;

}

void InitList(SqList *&L)

{

    L=(SqList *)malloc(sizeof(SqList));

    L->length=0;

}

void DestroyList(SqList *&L)

{

    free(L);

}

bool ListInsert(SqList *&L,int i,ElemType e)

{

    int j;

    if(i<1||i>L->length+1)

        return false;

    i--;

    for(j=L->length;j>i;j--)

        L->data[j]=L->data[j-1];

        L->data[i]=e;

        L->length++;

        return true;

}

bool ListDelete(SqList *&L,int i,ElemType e)

{

    int j;

    if(i<1||i>L->length)

        return false;

    i--;

    e=L->data[i];

    for(j=i;j<L->length-1;j++)

        L->data[j]=L->data[j+1];

        L->length--;

        return true;

}

//111111测试“建立线性表”的算法CreateList,为查看建表的结果,需要实现“输出线性表”的算法DispList。

/*int main()

{

    SqList *sq;

    ElemType x[6]={5,8,7,2,4,9};

    CreateList(sq,x,6);

    DisList (sq);

    return 0;

}*/

//2222在已经创建线性表的基础上,求线性表的长度ListLength、

//求线性表L中指定位置的某个数据元素GetElem、查找元素LocateElem的算法都可以实现了。

/*int main()

{

    SqList *sq;

    ElemType x[6]= {5,8,7,2,4,9};

    ElemType a;

    int loc;

    CreateList(sq, x, 6);

    DisList(sq);

    printf("表长度:%d\n", ListLength(sq));  //测试求长度

    if(GetElem(sq, 3, a))  //测试在范围内的情形

        printf("找到了第3个元素值为:%d\n", a);

    else

        printf("第3个元素超出范围!\n");

    if(GetElem(sq, 15, a))  //测试不在范围内的情形

        printf("找到了第15个元素值为:%d\n", a);

    else

        printf("第15个元素超出范围!\n");

    if((loc=LocateElem(sq, 8))>0)  //测试能找到的情形

        printf("找到了,值为8的元素是第 %d 个\n", loc);

    else

        printf("值为8的元素木有找到!\n");

    if((loc=LocateElem(sq, 17))>0)  //测试不能找到的情形

        printf("找到了,值为17的元素是第 %d 个\n", loc);

    else

        printf("值为17的元素木有找到!\n");

    return 0;

}

*/

//3333插入数据元素ListInsert、删除数据元素ListDelete、初始化线性表InitList、销毁线性表DestroyList

int main()

{

    SqList *sq;

    InitList(sq);

    printf("构造的新的:\n");

    DisList(sq);

    ListInsert(sq, 1, 5);

    ListInsert(sq, 2, 3);

    ListInsert(sq, 1, 4);

    printf("插入后的:\n");

    DisList(sq);

    ListDelete(sq, 1, 5);

    ListDelete(sq, 2, 3);

    printf("删除后的:\n");

    DisList(sq);

    DestroyList(sq);

    printf("销毁后的:\n");

    DisList(sq);

    return 0;

}

 输出及结果:







总结:

通过写程序的方式,熟悉了9种算法,并且可以留作算法库,为以后的编程提供方便。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: