华东交通大学软件基础课设报告.docx
- 文档编号:5122020
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:28
- 大小:222.58KB
华东交通大学软件基础课设报告.docx
《华东交通大学软件基础课设报告.docx》由会员分享,可在线阅读,更多相关《华东交通大学软件基础课设报告.docx(28页珍藏版)》请在冰豆网上搜索。
华东交通大学软件基础课设报告
软件技术基础上机报告
学校:
华东交通大学
学院:
电气与电子工程学院
专业班级:
2012电子信息工程2班
学号:
20120210110214
姓名:
游岩丰
目录
1,数组的合并——————————————————3
2,线性表的合并—————————————————5
3,队列—————————————————————9
4,二叉树的存储与遍历—————————————11
5,图的遍历——————————————————15
6,哈希表的生成冒泡排序及简单插入———————21
7,总体体会——————————————————26
第一次上机报告
一、实验题目:
数组的合并
二、实验环境:
visualc++6.0
三、实验目的:
1、熟悉二维数组的顺序存储结构;
2、熟悉当矩阵中绝大部分为零元素时的表示方法;
3、掌握将两个数组进行合并的方法。
四、实验操作:
1)、源程序:
#include"stdio.h"
#include"stdlib.h"
#defineERROR0
#defineOK1
typedefintStatus;
typedefintdatatype;
typedefstruct
{
datatype*base;
intindex[3];
intc[3];
}array;
StatusInitArray(array*A,intb1,intb2,intb3)
{
intelements;
if(b1<=0||b2<=0||b3<=0)returnERROR;
A->index[0]=b1;
A->index[1]=b2;
A->index[2]=b3;
elements=b1*b2*b3;
A->base=(datatype*)malloc(elements*sizeof(datatype));
if(!
(A->base))return(0);
A->c[0]=b2*b3;
A->c[1]=b3;
A->c[2]=1;//error:
A->c[0]=1;
returnOK;
}
Statusvalue(arrayA,inti1,inti2,inti3,datatype&x)
{
intoff;
if(i1<0||i1>=A.index[0]||i2<0||i1>=A.index[1]||i3<0||i1>=A.index[2])
returnERROR;
off=i1*A.c[0]+i2*A.c[1]+i3*A.c[2];
x=*(A.base+off);
returnOK;
}
Statusassign(array&A,datatypee,inti1,inti2,inti3)
{
intoff;
if(i1<0||i1>=A.index[0]||i2<0||i2>=A.index[1]||i3<0||i3>=A.index[2])
returnERROR;
off=i1*A.c[0]+i2*A.c[1]+i3*A.c[2];
*(A.base+off)=e;
returnOK;
}
voidmain()
{
inti,j,k,y=1;
arrayX;
InitArray(&X,3,4,5);
for(i=0;i { for(j=0;j for(j=0;j<=X.index[0];j++) for(k=0;k for(k=0;k<=X.index[2];k++) { assign(X,y++,i,j,k); } } for(i=0;i { printf("^^^^^^^[%d]^^^^^^^\n",i+1); for(j=0;j { for(k=0;k for(k=0;k<=X.index[2];k++) { value(X,i,j,k,y); printf("%4d",y);//erase: printf("%2d",y); } printf("\n"); } } } 2)、运行结果: 第二次上机报告 一、实验题目: 线性表的合并 二、实验环境: visualc++6.0 三、实验目的: 1、学会线性表的合并及线性表的表示方法 2、掌握线性表的合并方法 四、实验操作: 1)、源程序: #include #include usingnamespacestd; constmax=100; #defineelemtypeint typedefstruct { elemtype*elem;//线性表的基地址 intlength;//线性表当前的长度 intlistsize;//线性表当前分配的最大存储内容容量 }SeqList; voidCreatList(SeqList*L) { cout<<"输入线性表当前长度: "; cin>>L->length; //分配空间 L->elem=(int*)malloc(L->length*sizeof(int)); cout<<"请输入线性表的各个元素: "; for(inti=0;i {cin>>L->elem[i];} L->listsize=L->length; } voidMergeSeqList(SeqList*A,SeqList*B,SeqList*C) { elemtype*pa,*pb,*pc,*palast,*pblast; pa=A->elem;pb=B->elem; C->length=A->length+B->length; C->elem=(elemtype*)malloc(C->length*sizeof(elemtype)); if(! C->elem)exit(-1); palast=A->elem+A->length-1; pblast=B->elem+B->length-1; pc=C->elem; while(pa<=palast&&pb<=pblast) { if(*pa<=*pb) { *pc=*pa; pc++; pa++; } else{ *pc=*pb; pc++; pb++; } } while(pa<=palast){ *pc=*pa; pc++; pa++; } while(pb<=pblast) { *pc=*pb; pc++; pb++; } } voidDisList(SeqList*L) { for(inti=0;i {cout< cout< cout< } voidmain() { SeqListA,B,C; cout<<"顺序表A: "< CreatList(&A); cout<<"顺序表B: "< CreatList(&B); MergeSeqList(&A,&B,&C); cout<<"合并后的顺序表C: "< DisList(&C); system("pause"); } 2)、运行结果: 第三次上机报告 1、实验题目: 队列 二、实验目的: 1.熟悉队列的排序 三、实验环境: visualc++6.0 四、实验操作: 1)、源程序: #include #include #defineMaxsize50 structduilie { chardata[Maxsize]; intfront; intrear; }; voidinitduilie(structduilie*s) { s->front=s->rear=0; } intduilieEmpty(structduilie*s) { returns->front==s->rear; } intduiliefull(structduilie*s) { return(s->rear+1)%Maxsize==s->front; } voidenterduilie(structduilie*s,charx) { if(duiliefull(s))printf("¶ÓÁÐÂúÁË"); else{ s->data[s->rear]=x; s->rear=(s->rear+1)%Maxsize;} } charoutduilie(structduilie*s) { if(s->front==s->rear)printf("¶ÓÁпÕÁË"); returns->data[s->front]; //s->front=(s->front+1)%Maxsize; } voidmain() { chara; duilie*s; s=(structduilie*)malloc(sizeof(structduilie)); initduilie(s); a=getchar(); while(a! ='\n') { enterduilie(s,a); a=getchar(); } while(! duilieEmpty(s)) { printf("¶ÓÁÐÊä³ö: %c\n",outduilie(s)); s->front=(s->front+1)%Maxsize; } } 2)、运行结果: 第四次上机报告 一、实验题目: 二叉树的存储与遍历 二、实验目的: 1、熟悉二叉链表的存储结构; 2、熟练掌握生成二叉链表的过程。 三、实验环境: visualc++6.0 四、实验操作: 1)、源程序: #include #include #include //#defineNULL0 #defineN100/*定义二叉树最大结点数*/ typedefstructtreenode{ //elemtypedata;/*结点数据域的数据类型*/ intdata;/*结点数据域的数据类型*/ structtreenode*lchild,*rchild; }TREENODE,*TREENODEPTY,*BTREE; /*建立二叉树的算法*/ voidCreateTree(BTREE*root){ intvalue,front,rear; TREENODEPTYt,q[N]; /*q是队列,front,rear是队头队尾的下标*/ scanf("%d",&value);/*开始创建根结点*/ if(value==0){*root=NULL;return;};/*输入0表示空结点*/ *root=(TREENODEPTY)malloc(sizeof(TREENODE)); (*root)->data=value; rear=front=1; q[front]=*root;/*根指针入队*/ while(front<=rear){/*队列不空*/ t=q[front]; front++; scanf("%d",&value); if(value==0){t->lchild=NULL;} else{ t->lchild=(TREENODEPTY)malloc(sizeof(TREENODE)); t->lchild->data=value;/*建立左孩子结点*/ rear++; q[rear]=t->lchild;/*左孩子入队*/ } scanf("%d",&value); if(value==0){t->rchild=NULL;} else{ t->rchild=(TREENODEPTY)malloc(sizeof(TREENODE)); t->rchild->data=value;/*建立右孩子结点*/ rear++; q[rear]=t->rchild;/*右孩子入队*/ } }/*while*/ }/*CreateTree*/ /*先序遍历*/ voidPreOrder(BTREEroot){ TREENODEPTYp,s[N]; inttop=0;/*s是栈,top是栈顶下标*/ p=root; while (1){ while(p! =NULL){/*一直向左*/ printf("%d",p->data); top++; s[top]=p; p=p->lchild; } if(top! =0){/*右孩子转去递归*/ p=s[top]; top--; p=p->rchild; }elsereturn; }/*while (1)*/ } /*中序遍历*/ voidInOrder(BTREEroot){ TREENODEPTYp,s[N]; inttop=0;/*s是栈,top是栈顶下标*/ p=root; while (1){ while(p! =NULL){/*一直向左*/ top++; s[top]=p; p=p->lchild; } if(top! =0){/*右孩子转去递归*/ p=s[top]; printf("%d",p->data); top--; p=p->rchild; }elsereturn; }/*while (1)*/ } /*后序遍历*/ voidPostOrder(BTREEroot){ TREENODEPTYp,s[N]; inttop=0;/*s是栈,top是栈顶下标*/ p=root; while (1){ while(p! =NULL){ top++; s[top]=p; p=p->lchild; }/*一直向左递归,直到最左端*/ while (1){ if(s[top]->rchild! =NULL){/*如果是左,返回*/ p=s[top]->rchild;/*向右进一步,跳出循环,进入递归*/ break; } /*开始从右边返回,包括右子树不空的右返回*/ while(top! =0&&(s[top]->rchild==NULL||p==s[top]->rchild)){ p=s[top]; top--; printf("%d",p->data); } if(top==0)return; }/*while (1)*/ }/*while (1)*/ } voidmain(){ BTREEroot; printf("请按层次结构输入二叉树: (输入0表示空结点)\n"); CreateTree(&root);/*建立二叉树*/ printf("\n先序遍历的结果: "); PreOrder(root); printf("\n中序遍历的结果: "); InOrder(root); printf("\n后序遍历的结果: "); PostOrder(root); printf("\n遍历完成\n"); } 2)、运行结果: 第五次上机报告 一、实验题目: 图的遍历 二、实验目的: 1、熟悉图的几种遍历方法 2、掌握图在用邻接表表示下的遍历 三、实验环境: visualc++6.0 四、实验操作: 1)、源程序: #include #defineMaxVerNum50 structedgenode { intendver; intinform; edgenode*edgenext; }; structvexnode { charvertex; edgenode*edgelink; }; structGraph { vexnodeadjlists[MaxVerNum]; intvexnum; intarcnum; }; //队列的定义及相关函数的实现 structQueueNode { intnData; QueueNode*next; }; structQueueList { QueueNode*front; QueueNode*rear; }; voidEnQueue(QueueList*Q,inte) { QueueNode*q=newQueueNode; q->nData=e; q->next=NULL; if(Q==NULL) return; if(Q->rear==NULL) Q->front=Q->rear=q; else { Q->rear->next=q; Q->rear=Q->rear->next; } } voidDeQueue(QueueList*Q,int*e) { if(Q==NULL) return; if(Q->front==Q->rear) { *e=Q->front->nData; Q->front=Q->rear=NULL; } else { *e=Q->front->nData; Q->front=Q->front->next; } } //创建图 voidCreatAdjList(Graph*G) { inti,j,k; edgenode*p1; edgenode*p2; cout<<"请输入顶点数和边数: "< cin>>G->vexnum>>G->arcnum; cout<<"开始输入顶点表: "< for(i=0;i { cin>>G->adjlists[i].vertex; G->adjlists[i].edgelink=NULL; } cout<<"开始输入边表信息: "< for(k=0;k { cout<<"请输入边 "; cin>>i>>j; p1=newedgenode; p1->endver=j; p1->edgenext=G->adjlists[i].edgelink; G->adjlists[i].edgelink=p1; p2=newedgenode; p2->endver=i; p2->edgenext=G->adjlists[j].edgelink; G->adjlists[j].edgelink=p2; //因为是无向图,所以有两次建立边表的过程 } } //-------------------------------------------------------------深度优先遍历 voidDFS(Graph*G,inti,intvisit[]) { cout< visit[i]=1; edgenode*p=newedgenode; p=G->adjlists[i].edgelink; if(G->adjlists[i].edgelink&&! visit[p->endver]) { DFS(G,p->endver,visit); } } voidDFStraversal(Graph*G,charc)//深度优先遍历 { cout<<"该图的深度优先遍历结果为: "< intvisit[MaxVerNum]; for(inti=0;i { visit[i]=0;//全部初始化为0,即未访问状态 } intm; for(i=0;i { if(G->adjlists[i].vertex==c)//根据字符查找序号 { m=i; DFS(G,i,visit); break; } } //继续访问未被访问的结点 for(i=0;i { if(visit[i]==0) DFS(G,i,visit); } cout< } //-------------------------------------------------------------广度优先遍历 voidBFS(Graph*G,intv,intvisit[]) { QueueList*Q=newQueueList; Q->front=Q->rear=NULL; EnQueue(Q,v); while(Q->rear! =NULL) { inte=0; DeQueue(Q,&e); cout< visit[e]=1; edgenode*p=newedgenode; p=G->adjlists[e].edgelink; if(p) { intm=p->endver; if(m==0) { EnQueue(Q,m); while(visit[m]==0) {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华东 交通大学 软件 基础课 报告