采用顺序表、单链表二种存储结构
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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) {