實驗二: 線性表的基本操作
一.實驗目的
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已存在,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<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、執行程式、查錯