太原理工数据结构实验报告 实验一 顺序表 下载本文

课程名称:实验项目:

实验地点:

专业班级:计科

学生姓名:指导教师:

实验报告

数据结构B

顺序表 实验楼110 1301班 学号: 2013001989 杨喆 孟亮

2015年 1 月 1 日

一、实验目的和要求

本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现,提高分析和解决问题的能力。

要求仔细阅读并理解下列例题,上机调试并编译执行通过,并观察其结果,然后独立完成后面的实验内容,写出完整的实验报告。编写程序过程中注意养成良好的编程风格与习惯,要求程序结构清晰,程序缩进,适当注释。

二、实验内容和原理

1.设顺序表A中的数据元素递增有序,试写一程序,将x插入到顺序表的适当位置上,使该表仍然有序。

2.用单链表ha 存储多项式A(x )=a0+a1x1+a2x2+…+anxn(其中aI为非零系数),用单链表hb 存储多项式B(x )=b0+b1x1+b2x2+…+bmxm(其中bj为非零系数),要求计算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 \ #include \ #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(\ if(x >= L->elem[i-1]) {