1. 程式人生 > >實驗二: 線性表的基本操作

實驗二: 線性表的基本操作

一.實驗目的

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 <stdlib.h>

#include <stdio.h>

#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<L.elem+L.length;p++)

{

 printf("%d  ",*p);

}

 printf("\n");

}

(3)linemain.cpp

#include <stdio.h>

#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、執行程式、查錯