头文件list.h:
#ifndef LIST_H_INCLUDED//防止重复定义出错 #define LIST_H_INCLUDED #include <stdio.h>//必要的库文件包括 #include <malloc.h> #define MaxSize 50 //必要的宏定义 //声明实现算法的自定义函数,以及其他必要的自定义函数 typedef int ElemType;//将ElemType定义为int类型 typedef struct//用来存储顺序表的结构体Sq { ElemType data[MaxSize];//定义一个数组用来存储,int型 int length;//顺序表的长度 }SqList; bool ListEmpty(SqList *L);//———————————————判断线性表是否为空ListEmpty void DispList(SqList *&L);//———————————————输出线性表DispList void CreateList(SqList *&L,ElemType a[],int n);//———— 1.建立线性表CreateList void InitList(SqList * &L);//—————————————— 2.初始化线性表InitList void DestroyList(SqList * &L);//—————————————3.销毁线性表DestroyList bool ListInsert(SqList *&L,int i,ElemType &e);//—————4.插入数据元素ListInsert bool ListDelete(SqList *&L,int i,ElemType &e);//—————5.删除数据元素ListDelete int ListLength(SqList *&L);//—————————————— 6.求线性表的长度ListLength的 bool GetElem(SqList *&L,int i,ElemType &e);//—————— 7.求线性表L中指定位置(e)的某个数据元素GetElem int LocateElem(SqList *&L,ElemType e);//—————————8.查找元素LocateElem #endif//最前面两行的结束语句
函数文件list.cpp:
#include"list.h"//包含头文件 //定义各个自定义函数 void CreateList(SqList *&L,ElemType a[],int n)//————————1.“建立线性表”的算法CreateList { int i; L=(SqList *)malloc(sizeof(SqList));//分配空间 for(i=0;i<n;i++)//把数组的值赋予线性表 L->data[i]=a[i]; L->length=n;//赋予表长 } bool ListEmpty(SqList *L)//——————————实现判断线性表是否为空的算法ListEmpty { if(L->length==0) { printf("线性表为空\n"); return true; } else return false; } void DispList(SqList *&L)//——————————实现“输出线性表”的算法DispList { int i; if(ListEmpty(L))//判断是不是空表 return; for (i=0; i<L->length; i++) //输出 printf("%d ",L->data[i]); printf("\n"); //换行 } void InitList(SqList * &L)//————————————2.初始化线性表InitList { L=(SqList *)malloc(sizeof(SqList)); L->length=0; } void DestroyList(SqList * &L)//————————————3.销毁线性表DestroyList { free(L); } bool ListInsert(SqList *&L,int i,ElemType &e)//————————————4.插入数据元素ListInsert { if(i<1||i>L->length) return false; i--; for(int j=L->length;j>i;j--) { L->data[j]=L->data[j-1]; } L->length++; L->data[i]=e; return true; } bool ListDelete(SqList *&L,int i,ElemType &e)//————————————5.删除数据元素ListDelete { if(i<1||i>L->length) return false; i--; e=L->data[i]; for(int j=i;j<L->length-1;j++) L->data[j]=L->data[j+1]; L->length--; return true; } int ListLength(SqList *&L)//————————————6.增加求线性表的长度ListLength的函数 { return(L->length); } bool GetElem(SqList *&L,int i,ElemType &e)//————————————7.增加求线性表L中指定位置(e)的某个数据元素GetElem的函数 { if(i<1||i>L->length) return false; e=L->data[i-1]; return true; } int LocateElem(SqList *&L,ElemType e)//————————————8.增加查找元素LocateElem的函数 { int i=0; while(i<L->length&&L->data[i]!=e) i++; if(i>=L->length) return 0; else return i+1; }
用于测试的主函数mian.cpp:
#include"list.h"//包含头文件 //定义用于驱动测试的main函数 int main() { int i; ElemType e; SqList *sq;//定义一顺序表,结构体 ElemType x[6]={1,2,3,4,5,6};//定义一个数组并赋值 //1. CreateList(sq, x, 6);//调用“建立线性表” DispList(sq);//调用“输出线性表” ListEmpty(sq);//判断线性表是否为空 //2. InitList(sq);//初始化线性表 DispList(sq);//调用“输出线性表” //3. CreateList(sq, x, 6);//调用“建立线性表” DestroyList(sq);//销毁线性表 DispList(sq);//调用“输出线性表” //4. i=2; e=5; CreateList(sq, x, 6);//调用“建立线性表” ListInsert(sq,i,e);//插入数据元素 DispList(sq);//调用“输出线性表” //5. ListDelete(sq,i,e);//删除数据元素 DispList(sq);//调用“输出线性表” //6. int l; l=ListLength(sq);//求线性表的长度 printf("%d ",l); printf("\n"); //7. int n; GetElem(sq,i,n);//求线性表L中指定位置(e)的某个数据元素 printf("%d ",n); printf("\n"); //8. int m; m=LocateElem(sq,e);//查找元素 printf("%d ",m); printf("\n"); return 0; }
总结:运行结果来看和原来是没有什么差别的,需要注意的是头文件里防止重新定义的几个语句,类似的extern也可以帮助这类情况
#ifndef LIST_H_INCLUDED//防止重复定义出错 #define LIST_H_INCLUDED #endif