数据结构实验报告Word文件下载.docx

上传人:b****2 文档编号:5229615 上传时间:2023-05-04 格式:DOCX 页数:37 大小:569.50KB
下载 相关 举报
数据结构实验报告Word文件下载.docx_第1页
第1页 / 共37页
数据结构实验报告Word文件下载.docx_第2页
第2页 / 共37页
数据结构实验报告Word文件下载.docx_第3页
第3页 / 共37页
数据结构实验报告Word文件下载.docx_第4页
第4页 / 共37页
数据结构实验报告Word文件下载.docx_第5页
第5页 / 共37页
数据结构实验报告Word文件下载.docx_第6页
第6页 / 共37页
数据结构实验报告Word文件下载.docx_第7页
第7页 / 共37页
数据结构实验报告Word文件下载.docx_第8页
第8页 / 共37页
数据结构实验报告Word文件下载.docx_第9页
第9页 / 共37页
数据结构实验报告Word文件下载.docx_第10页
第10页 / 共37页
数据结构实验报告Word文件下载.docx_第11页
第11页 / 共37页
数据结构实验报告Word文件下载.docx_第12页
第12页 / 共37页
数据结构实验报告Word文件下载.docx_第13页
第13页 / 共37页
数据结构实验报告Word文件下载.docx_第14页
第14页 / 共37页
数据结构实验报告Word文件下载.docx_第15页
第15页 / 共37页
数据结构实验报告Word文件下载.docx_第16页
第16页 / 共37页
数据结构实验报告Word文件下载.docx_第17页
第17页 / 共37页
数据结构实验报告Word文件下载.docx_第18页
第18页 / 共37页
数据结构实验报告Word文件下载.docx_第19页
第19页 / 共37页
数据结构实验报告Word文件下载.docx_第20页
第20页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据结构实验报告Word文件下载.docx

《数据结构实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告Word文件下载.docx(37页珍藏版)》请在冰点文库上搜索。

数据结构实验报告Word文件下载.docx

,&

n);

从第m个人开始数起,请输入m:

m);

数到第k个人,该人出列,请输入k:

k);

head=use=(SLL*)malloc(sizeof(SLL));

//建立链表,形成链表头

head->

data=1;

for(i=2;

i<

=n;

i++)//形成其余的n-1个

{

use->

next=(SLL*)malloc(sizeof(SLL));

use=use->

next;

data=i;

//第i个置编号i

}

next=head;

//末首相连,形成环

人员序号为:

//输出人员的序号

temp=head;

for(i=0;

i<

n;

i++)

%d"

temp->

data);

temp=temp->

\n"

m-1;

i++)//use指向第m-1个,为了从m位开始数

use=use->

printf("

人员出列顺序为:

while(n){

for(i=1;

k;

i++)//掠过k-1个

temp=use->

//temp指向第k个

next=temp->

//第k个从环中脱钩

temp->

free(temp);

//释放第k个表元占用的空间

n--;

}

return0;

//利用数组

intmain()

inti,k,m,n,num[50],*p;

输入总人数n:

n="

p=num;

*(p+i)=i+1;

//从1到n给每个人编号

i=0;

//i为每次循环时计数变量

k=0;

//k为按1,2,3报数时的计数变量

m=0;

//m为退出时的人数

while(m<

n-1)//当退出人数比n-1少时执行循环体

if(*(p+i)!

=0)k++;

if(k==3)

出局人序号:

%d\n"

*(p+i));

*(p+i)=0;

//将退出时的人的编号置为0

//k报道3后,重置为0

m++;

//退出时的人数加1

i++;

if(i==n)i=0;

//报数到n后,i恢复为0

while(*p==0)p++;

//如果p指向的值等于0,就执行p++让它指向下一个元素,直到不为0

留下的人的编号是:

*p);

//p指向的编号就是最后留下来的人

system("

pause"

实验结果分析:

(1)利用链表

实验日期:

2017年9月8日

成绩评定:

□优秀(100-90分)

□良好(89-80分)

□中等(79-70分)

□及格(69-60分)

□不及格(60-0分)

教师签名:

年月日

栈和队列及其应用

掌握栈和队列的定义、存储结构及基本运算,理解栈与递归的应用

设计一个程序,演示用算符优先法对算术表达式求值的过程。

计算机

#include<

string.h>

#defineNULL0

#defineOK1

#defineERROR-1

#defineSTACK_INIT_SIZE100

#defineSTACKINCREMENT20

/*定义字符类型栈*/

typedefstruct{

intstacksize;

char*base;

char*top;

}Stack;

/*定义整型栈*/

int*base;

int*top;

}Stack2;

/*-----------------全局变量---------------*/

StackOPTR;

/*定义运算符栈*/

Stack2OPND;

/*定义操作数栈*/

charexpr[255]="

;

/*存放表达式串*/

char*ptr=expr;

intInitStack(Stack*s)//构造运算符栈

{

s->

base=(char*)malloc(STACK_INIT_SIZE*sizeof(char));

if(!

base)returnERROR;

s->

top=s->

base;

stacksize=STACK_INIT_SIZE;

returnOK;

}

intInitStack2(Stack2*s)//构造操作数栈

base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));

intIn(charch)//判断字符是否是运算符,运算符即返回1

return(ch=='

+'

||ch=='

-'

*'

/'

('

)'

#'

intPush(Stack*s,charch)//运算符栈插入ch为新的栈顶元素

*s->

top=ch;

top++;

return0;

intPush2(Stack2*s,intch)//操作数栈插入ch为新的栈顶元素

charPop(Stack*s)//删除运算符栈s的栈顶元素,用p返回其值

charp;

top--;

p=*s->

top;

returnp;

intPop2(Stack2*s)//删除操作数栈s的栈顶元素,用p返回其值

intp;

charGetTop(Stacks)//用p返回运算符栈s的栈顶元素

charp=*(s.top-1);

intGetTop2(Stack2s)//用p返回操作数栈s的栈顶元素

intp=*(s.top-1);

/*判断运算符优先权,返回优先权高的*/

charPrecede(charc1,charc2)

inti=0,j=0;

staticchararray[49]={

'

>

'

<

='

!

};

switch(c1)

/*i为下面array的横标*/

case'

:

break;

i=1;

i=2;

i=3;

i=4;

i=5;

i=6;

switch(c2)

/*j为下面array的纵标*/

j=0;

j=1;

j=2;

j=3;

j=4;

j=5;

j=6;

return(array[7*i+j]);

/*返回运算符*/

/*操作函数*/

intOperate(inta,charop,intb)

switch(op)

return(a+b);

return(a-b);

return(a*b);

return(a/b);

intnum(intn)//返回操作数的长度

charp[10];

itoa(n,p,10);

//把整型转换成字符串型

n=strlen(p);

returnn;

intEvalExpr()//主要操作函数

charc,theta,x;

intn,m;

inta,b;

c=*ptr++;

while(c!

||GetTop(OPTR)!

In(c))

{if(!

In(*(ptr-1)))ptr=ptr-1;

m=atoi(ptr);

//取字符串前面的数字段

n=num(m);

Push2(&

OPND,m);

ptr=ptr+n;

c=*ptr++;

else

switch(Precede(GetTop(OPTR),c))

:

Push(&

OPTR,c);

x=Pop(&

OPTR);

theta=Pop(&

b=Pop2(&

OPND);

a=Pop2(&

OPND,Operate(a,theta,b));

returnGetTop2(OPND);

intmain()

请输入正确的表达式以'

结尾:

do{

gets(expr);

}while(!

*expr);

InitStack(&

/*初始化运算符栈*/

OPTR,'

/*将#压入运算符栈*/

InitStack2(&

/*初始化操作数栈*/

表达式结果为:

EvalExpr());

2017年9月22日

串及其应用

掌握串的应用

试写一统计某文本中某些字符串的出现次数和位置。

涉及到串的模式匹配算法。

chara[80]="

abcdefghab\0"

charch;

inti,m,b[80];

intflag=0;

请输入要查找的子串"

ch=getchar();

//获取一个字符

m=strlen(a);

//统计主串的长度

for(i=0;

m;

i++){

if(a[i]==ch){//找到了,直接判断是否相等

b[flag]=i+1;

//记录位置

flag+=1;

if(flag==0)printf("

主串中没有这个子串"

else{

printf("

出现的次数:

flag);

flag;

i++){//对位置进行输出,用循环

出现过的位置:

b[i]);

实验日期:

2017年10月20日

图及其应用

掌握树和图在实际中的应用

设计一个校园导游程序,为来访的客人提供各种信息查询服务。

运用图的存储结构,和最短路径知识来解决。

#include<

process.h>

#defineINT_MAX10000//定义符号常量

#definen10//定义符号常量

/*定义全局变量*/

intcost[n][n];

//边的值

intshortest[n][n];

//两点间的最短距离

intpath[n][n];

//经过的景点

/*自定义函数原型说明*/

voidintroduce();

intshortestdistance();

voidfloyed();

voiddisplay(inti,intj);

//个人分工

(1)景点信息查询2)两景点的最短距离3)两个景点之间的路径

intmain()

{/*主函数*/

inti,j;

chark;

for(i=0;

=n;

i++)

for(j=0;

j<

j++)

cost[i][j]=INT_MAX;

cost[1][2]=cost[2][1]=300;

cost[2][3]=cost[3][2]=100;

cost[3][4]=cost[4][3]=2000;

cost[3][5]=cost[5][3]=60;

cost[1][5]=cost[5][1]=45;

cost[2][5]=cost[5][2]=40;

cost[4][5]=cost[5][4]=30;

cost[1][4]=cost[4][1]=150;

cost[4][5]=cost[5][4]=1500;

cost[1][1]=cost[2][2]=cost[3][3]=cost[4][4]=cost[5][5]=0;

while

(1)

{

printf("

\n\t\t\t********欢迎使用哈师大校园导游程序*********\n"

printf("

\t\t\t1.景点最短路径查询…请按s键\n"

\t\t\t2.退出系统……………请按e键\n"

\n\t\t\t**************下面是景点列表*************\n"

\t\t\t\t1.行知楼\n"

\t\t\t\t2.崇师楼\n"

\t\t\t\t3.图书馆\n"

\t\t\t\t4.理工楼\n"

\t\t\t\t5.体育馆\n"

\t\t\t\t请选择服务:

scanf("

\n%c"

switch(k)

{

case'

s'

printf("

进入最短路径查询:

shortestdistance();

break;

e'

exit(0);

default:

输入信息错误!

\n请输入字母s或e.\n"

}

}

}/*main*/

voidintroduce()

{/*景点介绍*/

inta;

printf("

请输入想查询的景点编号:

scanf("

a);

getchar();

switch(a)

case1:

行知楼:

学校主楼,各行政办公室所在处,学校日常事务办公点,师大的标志性建筑。

建筑中西结合,行知楼背后为每届毕业班照相处。

\n\n"

case2:

崇师楼:

为红白四方环形建筑,外观华美。

共六层,分A、B、C、D四区,教学重地。

case3:

图书馆:

学校的标志湖泊,分一为三。

有情人桥伫立其上,荷花,黑天鹅在下。

\n\n"

case4:

理工楼:

位于路,分为理工一、李工二、理工三三栋楼,主要为理工科学生上课重地。

case5:

体育馆:

是师大全校最大设施最先进齐全的运动馆,平时各类室内体育比赛都在这里进行。

default:

景点编号输入错误!

请输入1->

5的数字编号!

break;

}/*introduce*/

intshortestdistance()

{/*要查找的两景点的最短距离*/

请输入要查询的两个景点的编号(1->

5的数字编号并用'

间隔):

%d-%d"

i,&

j);

if(i>

n||i<

=0||j>

n||j<

0)

请输入要查询的两个景点的编号(1->

'

%d,%d"

else

floyed();

display(i,j);

}

return1;

}/*shortestdistance*/

voidfloyed()

{/*用floyed算法求两个景点的最短路径*/

inti,j,k;

for(i=1;

for(j=1;

shortest[i][j]=cost[i][j];

path[i][j]=0;

for(k=1;

k<

k++)

if(shortest[i][j]>

(shortest[i][k]+shortest[k][j]))

{/*用path[][]记录从i到j的最短路径上点j的前驱景点的序号*/

shortest[i][j]=shortest[i][k]+shortest[k][j];

path[i][j]=k;

path[j][i]=k;

}/*floyed*/

voiddisplay(inti,intj)

/*打印两个景点的路径及最短距离*/

inta,b;

a=i;

b=j;

您要查询的两景点间最短路径是:

if(shortest[i][j]!

=INT_MAX)

if(i<

j)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2