数据结构与算法-编写实例

末鹿安然 提交于 2020-02-29 14:02:24

这篇算是学习过程中的备忘录,之前没有好好敲过这门课的代码,现在开始把每节课敲的代码记录下来,方便期末复习和以后使用。

第一节课:线性表的基本操作

#include <cstdio>//C++的编译
#include <cstdlib> 
#include <iostream>//c++输入输出
using namespace std;//命名空间

#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2 
typedef int Status;// 状态 是个整型 

typedef int ElemType;
typedef struct{
    ElemType *elem;//数据的基地址 
    int length;//实际长度 
}SqList;
//1.初始化操作 
Status InitList(SqList &L){
//不引用的话,创建可以成功, 但是申请空间给了形参。对参数的值有改变则需要引用,否则都行。 
    L.elem = new int[MAXSIZE];//MAXSIZE个整形空间 
    if(L.elem==NULL)//没有申请空间成功,失败 
    {
//        printf("fail!");
        return ERROR;//exit(OVERFLOW);
    }    
    L.length=0;
    return OK;
}
//2.销毁线性表
void DestroyList(SqList &L) 
{
    if(L.elem)
        delete []L.elem;//不需要写free了 
}
//3.清空
void ClearList(SqList &L) 
{
    L.length=0;//长度置为0 
}
//4.显示线性表
void DispList(SqList &L)//参数引用不引用都可以 
{
    int i;
    for(i=0;i<L.length;i++)
        printf("[%d]",L.elem[i]);
    printf("\n");
}
//5.求长度 
int LengthList(SqList &L)
{
    return L.length;
}
//6.判断是空 7.是满(return (L.length==MAXSIZE);)
bool isEmptyList(SqList &L) 
{
//    return L.length==0?1:0;
    return (L.length==0);
//    if(L.length ==0)
//        return 1;
//    else
//        return 0;
}
//8.查: 按位置  按值
Status GetItem(SqList &L,int i,ElemType &e)//在L中找第i个元素 
{
    if(i<1 || i>L.length)
        return ERROR;
    e=L.elem[i-1];
    return OK;
}
int LocateItem(SqList &L,ElemType e)//在L中找到e值,并返回位置 
{
//    int i;
//    for(i=0;i<L.length ;i++)
//        if(L.elem[i]==e)
//            return i+1;
//    return 0;
    int i=0;
    while(i<L.length && L.elem[i]!=e)
        i++;
    if(i==L.length) return 0;//找完了没找到
    else return i+1; 
}
//9.在第i个元素前插入 e
Status InsertList(SqList &L,int i,ElemType e)
{
    int j;
     if(i<1||i>L.length+1)//判断位置是否合法 
         return ERROR;
     if(L.length==MAXSIZE) return ERROR;//if(isFullList(L))
    for(j=L.length-1;j>i-1;j--)
         L.elem[j+1]=L.elem[j];
     L.elem[i-1]=e;
     L.length++;
     return OK;
}
//10.在L中删除第i个元素,把要删除的数据放到e中
Status DeleteList(SqList &L,int i,ElemType &e) 
{
    int j;
    if(i<1 || i>L.length)
        return ERROR;
    e=L.elem[i-1];//在被删掉之前保存在e中 
    for(j=i;j<L.length;j++)
        L.elem[j-1]=L.elem[j];//相当于把下标为i-1,即第i个元素被后边给覆盖了
//    for(j=i-1;j<L.length-1;j++) 
//        L.elem[j]=L.elem[j+1]//被后边元素覆盖 
    L.length--;
    return OK;
}
int main(){
    SqList L;
    int i;
    if(InitList(L)==1)
    {
        printf("success! lentgh=%d\n",L.length);
    }
    for(i=0;i<5;i++)
        L.elem[i]=i;//添加一些元素测试 
    L.length=5;
    DispList(L);
    return 0;
}

  日后更。2020-02-29  12:34:21

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!