实验二: 线性表的基本操作

一.实验目的

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已存在,1iListLength(L)+1

   // 操作结果:在L中第i个位置之前插入新的数据元素eL的长度加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已存在,1iListLength(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、运行程序、查错

你可能感兴趣的:(数据结构,C)