一.实验目的
1、 会定义线性表的顺序存储类型。
2、 熟悉C或C++程序的基本结构,掌握程序中的用户头文件、实现文件和主文件之间的相互关系及各自的作用。
3、 熟悉对线性表的一些基本操作和具体的函数定义。
4、 熟悉TurboC或VC操作环境的使用以及多文件程序的输入、编辑、调试和运行的全过程。
二.实验内容
该程序实现线性表顺序存储结构的插入、删除等操作。
三.实验步骤
启动VC++6.0
输入程序
(1)line.h
typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
typedef int ElemType;
typedef struct SqList
{
ElemType *elem; // 存储空间基址
int length; // 当前长度
int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位)
}SqList;
Status InitList(SqList &L);
int ListLength(SqList L);
Status ListInsert(SqList &L,int i,ElemType e);
Status ListDelete(SqList &L,int i,ElemType &e);
void ListPrint(SqList L);
(2)line.cpp
#include
#include
#include "line.h"
#define LIST_INIT_SIZE 10 // 线性表存储空间的初始分配量
#define LISTINCREMENT 2 // 线性表存储空间的分配增量
#define OK 1
#define ERROR 0
#define OVERFLOW -2
Status InitList(SqList &L)
{ // 操作结果:构造一个空的顺序线性表
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)
exit(OVERFLOW); // 存储分配失败
L.length=0; // 空表长度为0
L.listsize=LIST_INIT_SIZE; // 初始存储容量
return OK;
}
int ListLength(SqList L)
{ // 初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数
return L.length;
}
Status ListInsert(SqList &L,int i,ElemType e)
{ // 初始条件:顺序线性表L已存在,1≤i≤ListLength(L)+1
// 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1
ElemType *newbase,*q,*p;
if(i<1||i>L.length+1)return ERROR;
if(L.length>=L.listsize){
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p) *(p+1)=*p;
*q=e;
++L.length;
return OK;
}
Status ListDelete(SqList &L,int i,ElemType &e)
{ // 初始条件:顺序线性表L已存在,1≤i≤ListLength(L)
// 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1
ElemType *newbase,*q,*p;
if((i<1)||(i>L.length)) return ERROR;
p=&(L.elem[i-1]);
e=*p;
q=L.elem+L.length-1;
for(++p;p<=q;++p) *(p-1)=*p;
--L.length;
return OK;
}
void ListPrint(SqList L)
{
ElemType *p;
printf("线性表中的元素为:\n");
for(p=L.elem;p { printf("%d ",*p); } printf("\n"); } (3)linemain.cpp #include #include"line.h" void main(){ SqList L; int i; ElemType e; InitList(L); printf("请输入元素:\n"); for(i=1;i<=6;i++){ scanf("%d",&e); ListInsert(L,i,e); } ListPrint(L); printf("请输入要删除的位置:\n"); scanf("%d",&i); ListDelete(L,i,e); ListPrint(L); } 3、运行程序、查错