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

来源:互联网 发布:光电材料仿真软件 编辑:程序博客网 时间:2024/05/16 19:49

问题及代码:

/**Copyright (c) 2014,烟台大学计算机学院*All rights reserved.*文件名称:顺序表的基本运算*作者:李子伦*完成日期:2015年9月18日**问题描述:实现顺序表基本运算有算法(对应视频0204创建线性表的实现和0205顺序表基本运算的实现),依据“最小化”的原则进行测试。所谓最小化原则,指的是利用尽可能少的基本运算,组成一个程序,并设计main函数完成测试*输入描述:线性表*程序输出:测试结果*/
代码(1)

#include<stdio.h>#include<malloc.h>#define MaxSize 50   //Maxsize将用于后面定义存储空间的大小typedef int ElemType;  ////ElemType在不同场合可以根据问题的需要确定,在此取简单的inttypedef struct{    ElemType data[MaxSize];    int length;} SqList;void CreateList(SqList *&L, ElemType a[], int n);void DispList(SqList *L);bool ListEmpty(SqList *L);int ListLength(SqList *L);int LocateElem(SqList *L, ElemType e); bool GetElem(SqList *L,int i,ElemType &e); int main(){    SqList *sq;    ElemType x[6]= {5,8,7,2,4,9};ElemType a;    CreateList(sq, x, 6);    DispList(sq);printf("表长度%d\n",ListLength(sq));printf("查找线性表中的第三个元素%d\n",LocateElem(sq, 3));     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");    return 0;}void DispList(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);}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;}int ListLength(SqList *L)  //求线性表长度{return(L->length);}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;}bool GetElem(SqList *L, int i, ElemType &e)  //查找某个元素并输出真假{ if (i<1 || i>L->length) return false; e=L->data[i-1]; return true;}

代码(2)

#include<stdio.h>#include<malloc.h>#define MaxSize 50   //Maxsize将用于后面定义存储空间的大小typedef int ElemType;  ////ElemType在不同场合可以根据问题的需要确定,在此取简单的inttypedef struct{    ElemType data[MaxSize];    int length;} SqList;void CreateList(SqList *&L, ElemType a[], int n);void DispList(SqList *L);bool ListEmpty(SqList *L);int ListLength(SqList *L);int LocateElem(SqList *L, ElemType e);bool GetElem(SqList *L,int i,ElemType &e);void DestroyList(SqList *&L);void InitList(SqList *&L);bool ListInsert(SqList *&L, int i, ElemType e);int main(){    SqList *sq;    InitList(sq);    ListInsert(sq, 1, 5);    ListInsert(sq, 2, 3);    ListInsert(sq, 1, 4);    DispList(sq);    return 0;}void DispList(SqList *L)  //输出线性表{    int i;    if (ListEmpty(L))         return;    for(i=0; i<L->length; i++)   printf("%d ",L->data[i]);    printf("\n");}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--)  //将date[i]及后面的元素后移一个位置L->data[j]=L->data[j-1];L->data[i]=e;    L->length++;return true;}void InitList(SqList *&L)  //初始化线性表{    L=(SqList *)malloc(sizeof(SqList));    L->length=0;}


运行结果:

代码(1)


代码(2)

知识点总结:

本次项目考察了对线性表算法的实践,并用测试函数实现了对算法的一一检验,同时,对指针的引用是新引入的知识点,目的是为了i大大减少了需要存储的空间。


心得体会:

在实际操作中会遇到很多之前没有遇到的问题,如函数操作时要注意编码规范一一对齐,在CODEBLOCKS编译中注意在创建项目是选择C++,这都是今后需要注意的问题。

0 0
原创粉丝点击