太原理工数据结构实验报告 实验一 顺序表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
课程名称:数据结构B
实验项目:顺序表
实验地点:实验楼110
专业班级:计科1301班学号:********** 学生姓名:**
指导教师:**
2015年1 月1 日
一、实验目的和要求
本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现,提高分析和解决问题的能力。
要求仔细阅读并理解下列例题,上机调试并编译执行通过,并观察其结果,然后独立完成后面的实验内容,写出完整的实验报告。编写程序过程中注意养成良好的编程风格与习惯,要求程序结构清晰,程序缩进,适当注释。
二、实验内容和原理
1.设顺序表A中的数据元素递增有序,试写一程序,将x插入到顺序表的适当位置上,使该表仍然有序。
2.用单链表ha 存储多项式A(x )=a0+a1x1+a2x2+…+a n x n(其中a I为非零系数),用单链表hb 存储多项式B(x )=b0+b1x1+b2x2+…+b m x m(其中b j为非零系数),要求计算C(x )= A(x )+B(x ),结果存到单链表hc中。试写出程序。
3.设有n个人围坐在一个圆桌周围,现从第s个人开始报数,数到第m的人出列,然后从出列的下一个人重新开始报数,数到m的人又出列,如此重复,直到所有的人全部出列为止。Josephus问题是:对于任意给定的n,m,s,求出按出列次序得到的n个人员的顺序表。
三、主要仪器设备
1.设备: PC微机;
2.实验环境: windows操作系统;VC++6.0,
四、实验结果与分析(必填)
(1)程序清单:
实验1_1:
#include "stdio.h"
#include "malloc.h"
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 80
#define LISTINCREMENT 10
typedef int Status;
typedef int ElemType;
typedef struct
{
ElemType *elem;
int length;
int listsize;
}SqList;
Status InitList_Sq(SqList *L) //构造一个空的线性表
{
L->elem=(ElemType*) malloc(LIST_INIT_SIZE*sizeof(ElemType));
if (!L->elem)
return(OVERFLOW);
L->length=0;
L->listsize=LIST_INIT_SIZE;
return OK;
}
Status ListInsert_Sq(SqList *L,int i,ElemType e) //插入x
{
ElemType *q,*p,*newbase;
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) return(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; //插入e
++L->length; //表长加一
return OK;
}
//将x插入到顺序表(递增有序)的适当位置上
Status InsertOrderList_Sq(SqList *L,ElemType x)
{
int i=1;
ElemType *q,*p;
for(i=L->length; i<=0; i++)
{
printf("%d",i);
if(x >= L->elem[i-1])
{
q=&(L->elem[i-1]);
break;
}
}
for(p=&(L->elem[L->length-1]);p>=q;--p)
*(p+1)=*p; //插入位置之后的元素后移一位if(i >= L->length) q=&(L->elem[i]);
*q=x; //插入x
++L->length; //表长加一
return OK;
}
Status CreatList_sq(SqList &Lst)
{
int i,n;
printf("请输入你要创建的顺序表的长度");
scanf("%d",&n);
if (InitList_Sq(&Lst)==OK)
{
for(i=n;i>=0;i--) //循环输入一个顺序数组
{
if(ListInsert_Sq(&Lst,1,i)!=OK)
break;
}
printf("\n顺序表已建立:");
for (i=0;i printf("%d ",Lst.elem[i]); } return 0; } Status InsertOrderList_Sq_1(SqList &Lst) { int i,n; printf("\n请输入你要插入的元素"); scanf("%d",&n); InsertOrderList_Sq(&Lst,n); printf("\n插入后的顺序表为");