采用顺序表、单链表二种存储结构

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南京信息工程大学数据结构实验(实习)报告

实验(实习)名称顺序表、单链表实验(实习)日期2015-10-11 得分指导教师顾韵华系计软院专业计科年级2014级班次 2 姓名

一、实验目的

1、掌握采用顺序表、单链表二种存储结构实现线性表的归并运算。

二、实验内容

1、输入两个顺序表A和B的元素值(整数),元素递增有序,编写程序将A和B归并成一个按元素值递增有序的顺序表C。分别输出顺序表A、B和C所有元素的值。

2、输入两个单链表A和B的元素值(整数),其表中元素递增有序,编写程序将A和B归并成一个按元素值递增有序的单链表C。分别输出单链表A、B和C所有结点的值。

三、数据结构设计和实现

1、顺序表数据结构设计和实现

#include

#include

#include

#include

//常量定义

#define LIST_INIT_SIZE 100

#define LISTINCREMENT 10

#define OK 1

#define ERROR 0

#define OVERFLOW -2

#define True 1

#define False 0

//函数返回值类型定义

typedef int Status;

//表节点数据类型定义

typedef int ElemType;

//顺序表类型定义

typedef struct{

ElemType *elem;

int length;

int listsize;

} SqList;

//顺序表各操作声明

Status InitList_Sq(SqList &L);

Status DetroyList_Sq(SqList &L);

Status ClearList_Sq(SqList &L);

int ListEmpty_Sq(SqList L);

int ListLength_Sq(SqList L);

Status GetElem_Sq(SqList L,int i,ElemType &e);

Status ListInsert_Sq(SqList &L,int i,ElemType e);

Status ListDelete_Sq(SqList &L,int i,ElemType &e);

void PrintList_Sq(SqList L);

void MergeList(SqList La,SqList Lb,SqList &Lc);

#include"link.h"

#include"iostream.h"

Status InitList_Sq(SqList &L)

{

L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));

if (!L.elem) exit(OVERFLOW);

L.length=0;

L.listsize=LIST_INIT_SIZE;

return OK;

}

Status DetroyList_Sq(SqList &L)

{ if (L.elem) free(L.elem);

return OK;

}

Status ClearList_Sq(SqList &L)

{ if (L.elem)

{ L.length=0;

L.listsize=0;

}

return OK;

}

int ListEmpty_Sq(SqList L)

{

return (L.length==0);

}

int ListLength_Sq(SqList L)

{

cout<

return 0;

}

Status GetElem_Sq(SqList L,int i,ElemType &e)

{

if (i<1 || i>=L.length)

return ERROR;

e=L.elem[i-1];

return OK;

}

Status ListInsert_Sq(SqList &L,int i,ElemType e)

{

ElemType *newbase,*p,*q;

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_Sq(SqList &L,int i,ElemType &e)

{

ElemType *p,*q;

if (i<1 || i>L.length)

return ERROR;

p=&(L.elem[i-1]);

e=*p;

q=L.elem+L.length-1;

for (++p;p

*(p-1)=*p;

L.length--;

return OK;

}

void PrintList_Sq(SqList L)

{

相关文档
最新文档