数据结构 第二周(3)程序的多文件组织

来源:互联网 发布:排班软件 编辑:程序博客网 时间:2024/05/23 21:23

问题描述

项目2 - 程序的多文件组织】 
  学习数据结构,目标就是要编制出有相当规模的程序的。将所有的代码放在一个文件中的做法,不能适用现阶段的需求了。 
  通过这个项目,确认有能力用多文件组织程序。方便以后各章,我们就某一数据结构定义算法库,并能引用算法库进行实践。 
  最简单的多文件组织,一个项目中有3个文件: 
  (1) .h 头文件:定义数据类型、声明自定义函数、定义宏等 
  (2).cpp 源文件1:用于实现头文件中声明的自定义函数 
  (3).cpp 源文件2:定义main()函数,用于调用相关函数,实现问题求解目标。 

首先,先列出main.cpp中的调用函数,调用的函数保存在file.cpp file.h中

#include <iostream>#include "file.h"//对头文件的声明,头文件里包含有函数的声明。using namespace std;int main(){   ElemType a[6]={2,3,4,5,6},e;   SqList *L;   CreatList(L,a,5);   ListInsert(L,0,0);   DispList(L);   return 0;}

其次是file.h中的函数,包含函数的声明

#ifndef FILE_H_INCLUDED#define FILE_H_INCLUDED//函数的声明存放在此.h文件里。#define MaxSize 50typedef int ElemType;typedef struct{  ElemType data[MaxSize];  int length;} SqList;void CreatList(SqList *&L,ElemType a[],int n);void InitList (SqList *&L);void DestroyList (SqList *&L);bool ListEmpty(SqList *&L);int ListLength(SqList *&L);bool GetElem(SqList *&L,int i,ElemType &e);int LocateElem(SqList *L,ElemType e);bool ListInsert(SqList *&L,int i,ElemType e);bool DeleList(SqList *&L,int i,ElemType &e);void DispList(SqList *&L);#endif // FILE_H_INCLUDED

file.cpp中的函数

//说明函数的声明是在file.h里,定义在此.cpp文件里。#include"file.h"#include<iostream>using namespace std;#include<malloc.h>//以下是对函数的定义。//创立顺序表。void CreatList(SqList *&L,ElemType a[],int n){ int i=0,k=0; L=(SqList *)malloc(sizeof(SqList)); for(i;i<n;i++) {   L->data[i]=a[i];   ++k; } L->length=k;}//初始化顺序表void InitList (SqList *&L){ L=(SqList *)malloc(sizeof(SqList)); L->length=0;}//销毁顺序表void DestroyList (SqList *&L){ free(L);}//判断是否为空表:若是返回true,1。否则false,0;bool ListEmpty(SqList *&L){  return (L->length==0);}//求顺序表长度int ListLength(SqList *&L){    return (L->length);}//求线性表某个元素的值,有的话返回true,并且把值付给ebool 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;  while(i<L->length &&L->data[i]!=e)    i++;  if(i>L->length)    return 0;  else    return i+1;}//插入数据元素bool ListInsert(SqList *&L,int i,ElemType e){    int j;    if(i<0||i>L->length+1)        return false;    for(j=L->length;j>i;j--)        L->data[j]=L->data[j-1];     L->data[i]=e;     L->length++;     return true;}//删除数据元素bool DeleList(SqList *&L,int i,ElemType &e){    int j;    if(i<1||i>L->length)        return false;    for(j=i-1;j<L->length;j++)        L->data[j]=L->data[j+1];    L->length--;    return true;}//显示顺序表void DispList(SqList *&L){  int l=0;  while(l!=L->length)  {  cout<<L->data[l]<<" ";  l++;  }  cout<<endl;}
编译结果

原创粉丝点击