数据结构第五版第二章实验1.实现顺序表的各种基本运算

来源:互联网 发布:贵州 大数据大诚信 编辑:程序博客网 时间:2024/05/29 04:43

编写一个程序exp2-1.cpp,实现顺序表的各种运算

并在此基础上完成如下功能:

(1)初始化顺序表L;
(2)采用尾插法依次插入元素a,b,c,d,e;
(3)输出顺序表L;
(4)输出顺序表L的长度;
(5)判断顺序表L是否为空;
(6)输出顺序表L的第3个元素;
(7)输出元素a的位置;
(8)在第4个元素位置上插入元素f;
(9)输出顺序表L;
(10)删除L的第3个元素;
(11)输出顺序表L;
(12)释放顺序表L

//顺序表的各种基本运算*/#include <stdio.h>#include <malloc.h>#define MaxSize 50typedef char ElemType;typedef struct{    ElemType data[MaxSize];    int length;} SqList;void InitList(SqList *&L)   //初始化线性表{    L=(SqList *)malloc(sizeof(SqList)); //分配存放线性表的空间    L->length=0;                        //置空线性表长度为0}void DestroyList(SqList *L)     //销毁线性表{    free(L);}bool ListEmpty(SqList *L)   //判线性表是否为空表{    return(L->length==0);}int ListLength(SqList *L)   //求线性表的长度{    return(L->length);}void DispList(SqList *L)    //输出线性表{    int i;    if (ListEmpty(L)) return;    for (i=0;i<L->length;i++)        printf("%c ",L->data[i]);    printf("\n");}bool GetElem(SqList *L,int i,ElemType &e)   //求线性表中某个数据元素值{    if (i<1 || i>L->length)        return false;           //参数错误时返回false    e=L->data[i-1];             //取元素值    return true;                //成功找到元素时返回true}int LocateElem(SqList *L, ElemType e)   //按元素值查找{    int i=0;    while (i<L->length && L->data[i]!=e)        i++;                    //查找元素e    if (i>=L->length)           //未找到时返回0        return 0;    else        return i+1;             //找到后返回其逻辑序号}bool ListInsert(SqList *&L,int i,ElemType e)    //插入数据元素{    int j;    if (i<1 || i>L->length+1)        return false;           //参数错误时返回false    i--;                        //将顺序表逻辑序号转化为物理序号    for (j=L->length;j>i;j--)   //将data[i]及后面元素后移一个位置        L->data[j]=L->data[j-1];    L->data[i]=e;               //插入元素e    L->length++;                //顺序表长度增1    return true;                //成功插入返回true}bool ListDelete(SqList *&L,int i,ElemType &e)   //删除数据元素{    int j;    if (i<1 || i>L->length)     //参数错误时返回false        return false;    i--;                        //将顺序表逻辑序号转化为物理序号    e=L->data[i];    for (j=i;j<L->length-1;j++) //将data[i]之后的元素前移一个位置        L->data[j]=L->data[j+1];    L->length--;                //顺序表长度减1    return true;                //成功删除返回true}extern void InitList(SqList *&L);extern void DestroyList(SqList *L);extern bool ListEmpty(SqList *L);extern int ListLength(SqList *L);extern void DispList(SqList *L);extern bool GetElem(SqList *L,int i,ElemType &e);extern int LocateElem(SqList *L, ElemType e);extern bool ListInsert(SqList *&L,int i,ElemType e);extern bool ListDelete(SqList *&L,int i,ElemType &e);int main(){    SqList *L;    ElemType e;    printf("顺序表的基本运算如下:\n");    printf("  (1)初始化顺序表L\n");    InitList(L);    printf("  (2)依次采用尾插法插入a,b,c,d,e元素\n");    ListInsert(L,1,'a');    ListInsert(L,2,'b');    ListInsert(L,3,'c');    ListInsert(L,4,'d');    ListInsert(L,5,'e');    printf("  (3)输出顺序表L:");    DispList(L);    printf("  (4)顺序表L长度=%d\n",ListLength(L));    printf("  (5)顺序表L为%s\n",(ListEmpty(L)?"空":"非空"));    GetElem(L,3,e);    printf("  (6)顺序表L的第3个元素=%c\n",e);    printf("  (7)元素a的位置=%d\n",LocateElem(L,'a'));    printf("  (8)在第4个元素位置上插入f元素\n");    ListInsert(L,4,'f');    printf("  (9)输出顺序表L:");    DispList(L);    printf("  (10)删除L的第3个元素\n");        ListDelete(L,3,e);    printf("  (11)输出顺序表L:");    DispList(L);    printf("  (12)释放顺序表L\n");    DestroyList(L);}
阅读全文
0 0
原创粉丝点击