太原理工大学现代科技学院数字测控实习报告 4.docx

上传人:b****8 文档编号:10512072 上传时间:2023-02-17 格式:DOCX 页数:28 大小:20.38KB
下载 相关 举报
太原理工大学现代科技学院数字测控实习报告 4.docx_第1页
第1页 / 共28页
太原理工大学现代科技学院数字测控实习报告 4.docx_第2页
第2页 / 共28页
太原理工大学现代科技学院数字测控实习报告 4.docx_第3页
第3页 / 共28页
太原理工大学现代科技学院数字测控实习报告 4.docx_第4页
第4页 / 共28页
太原理工大学现代科技学院数字测控实习报告 4.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

太原理工大学现代科技学院数字测控实习报告 4.docx

《太原理工大学现代科技学院数字测控实习报告 4.docx》由会员分享,可在线阅读,更多相关《太原理工大学现代科技学院数字测控实习报告 4.docx(28页珍藏版)》请在冰豆网上搜索。

太原理工大学现代科技学院数字测控实习报告 4.docx

太原理工大学现代科技学院数字测控实习报告4

太原理工大学现代科技学院

 

数据结构课程实验报告

 

专业班级计算机科学与技术14--2班

学号2014101952

姓名王晓姝

指导教师邓丽平

……………………………………装………………………………………订…………………………………………线………………………………………

实验名称单向链表的操作同组人

专业班级计科14--2学号2014101952姓名王晓姝成绩

 

一、实验目的:

1。

掌握单向链表的存储特点及其实现;

2.掌握单向链表的插入、删除算法及其应用算法的程序实现

二、实验内容:

1。

键盘输入一组元素,建立一个带头结点的单向链表(无序)

2.遍历单向链表、

3.在单向链表中删除元素E;

4.单向链表的逆置

5.设计一个MAIN()函数,分别调试上述算法。

三、实验环境:

MicrosoftVisualC++6.0

4、主要算法

#include

#include

#include

#include

#include

#include

typedefstructLNode{

intdata;

structLNode*next;

}LNode,*Linklist;

intcount=0,flag=0;

Linklistadd()/*初始化*/

{

Linklisthead,p1,p2;

count=0;

head=p2=(Linklist)malloc(sizeof(LNode));

do

{

flag=0;

p1=(Linklist)malloc(sizeof(LNode));

p2->next=p1;

p1->next=NULL;

printf("请输入一个数字:

\n");

scanf("%d",&p1->data);

p2=p1;

count++;

printf("继续输入按:

1返回按:

0\n");

scanf("%d",&flag);

}while(flag==1);

printf("你共输入了%d个元素.",count);

printf("按任意键继续\n");

getch();

return(head);

}

voidvisit(Linklisthead)/*遍历*/

{

inti;

Linklistp;

p=head->next;

for(i=1;i<=count;i++)

{

printf("%d\n",p->data);

p=p->next;

}

printf("按任意键继续\n");

getch();

}

voidDle(Linklisthead)/*删除*/

{

if(!

head->next)

printf("链表为空!

请先输入元素值\n");

else

{

inte;

Linklistp1,p2;

p1=p2=head;

printf("请输入一个要删除的元素值:

\n");

scanf("%d",&e);

while(p1->data!

=e&&p1->next!

=NULL)

{

p2=p1;

p1=p1->next;

}

if(p1->data==e)

{

p2->next=p1->next;

free(p1);

count--;

}

elseprintf("无此元素!

\n");

}

}

voidopp(Linklisthead)/*逆置*/

{

Linklistp1,p,q;

p=head->next;

p1=p->next;

p->next=NULL;

while(p1->next!

=NULL)

{

q=p1;

p1=p1->next;

q->next=p;

p=q;

}

p1->next=q;

head->next=p1;

printf("逆置后的元素为:

\n");

visit(head);

}

voidmain()

{

intc;

LinklistL;

do

{

system("cls");

printf("##############数据结构实验一######################\n");

printf("\n");

printf("输入元素按:

1遍历按:

2删除按:

3逆置按:

4退出按:

0\n");

scanf("%d",&c);

if(c==1)

{

L=add();

continue;

}

elseif(c==2)

{

if(count==0)

{

printf("链表为空,请输入元素!

\n");

printf("按任意键继续\n");

getch();

}

else

{

printf("元素顺序为:

\n");

visit(L);

}

continue;

}

elseif(c==3)

{

if(count==0)

{

printf("链表为空,请输入元素!

\n");

printf("按任意键继续\n");

getch();

}

else

{

Dle(L);

printf("删除后的元素为:

\n");

visit(L);

}

continue;

}

elseif(c==4)

{

if(count==0)

{

printf("链表为空,请输入元素!

\n");

printf("按任意键继续\n");

getch();

}

else

{

opp(L);

}

continue;

}

elseif(c==0)

{

printf("您已退出,再见!

\n");

exit(0);

}

}while

(1);

}

五、实验结果及分析

输入元素:

67841

遍历元素顺序:

67841

删除元素值4删除元素顺序为6841

逆置的元素1486

 

……………………………………装………………………………………订…………………………………………线………………………………………

实验名称栈和队列同组人

专业班级计科14--2学号2014101952姓名王晓姝成绩

一、实验目的:

1.编程实现进制转化和判断回文。

2熟悉站和队列的操作。

2、实验内容

实现十进制的转化和回文判断。

三、实验环境:

MicrosoftVisualC++6.0

四主要算法

栈的进制转化

#include

#include

#include

#include

#defineSTACK_INIT_SIZE100

#defineSTACKINCREMENT10

#defineselemtypeint

#definestatusint

#defineok1

typedefstruct{

selemtype*base;

selemtype*top;

intstacksize;

}sqstack;

statusinitstack(sqstack&s){

s.base=(selemtype*)malloc(STACK_INIT_SIZE*sizeof(selemtype));

if(!

s.base)exit(0);

s.top=s.base;

s.stacksize=STACK_INIT_SIZE;

returnok;

}

statusstackempty(sqstacks){

if(s.top==s.base)return1;

return0;

}

statuspush(sqstack&s,selemtypee){

if(s.top-s.base>=s.stacksize){

s.base=(selemtype*)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(selemtype));

if(!

s.base)exit(0);

s.top=s.base+s.stacksize;

s.stacksize+=STACKINCREMENT;

}

*s.top++=e;

returnok;

}

statuspop(sqstack&s,selemtype&e){

if(s.top==s.base)return0;

e=*--s.top;

returnok;

}

voidconversion(intN,intM){

inte;

sqstacks;

initstack(s);

while(N){

push(s,N%M);

N=N/M;

}

while(!

stackempty(s)){

if(M>10)

{

pop(s,e);

if(e>9)

printf("%c",e+55);

else

printf("%d",e);

}

else

{

pop(s,e);

printf("%d",e);

}

}

printf("\n按任意键继续\n");

getch();

}

voidmain()

{

intx,y,flag;

do

{

system("cls");

printf("**********************实验二数制转换**********************\n\n\n");

printf("进行数制转换按:

1退出按:

0\n");

scanf("%d",&flag);

if(flag)

{

printf("请输入一个十进制的非负数:

\n");

scanf("%d",&x);

printf("请输入要将它转换的进制数:

\n");

scanf("%d",&y);

printf("十进制的%d转化成%d进制为:

",x,y);

conversion(x,y);

}

}while(flag);

}

队列的回文判断

#include

#include

#include

#include

#defineSTACK_INIT_SIZE100

#defineSTACKINCREMENT10

typedefcharSElemType;

typedefcharQElemType;

#definestatusint

#defineok1

intcount;

typedefstruct{

SElemType*base;

SElemType*top;

intstacksize;

}sqstack;

statusinitstack(sqstack&s){

s.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));

if(!

s.base)exit(0);

s.top=s.base;

s.stacksize=STACK_INIT_SIZE;

returnok;

}

statusstackempty(sqstacks){

if(s.top==s.base)return1;

return0;

}

statuspush(sqstack&s,SElemTypee){

if(s.top-s.base>=s.stacksize){

s.base=(SElemType*)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(SElemType));

if(!

s.base)exit(0);

s.top=s.base+s.stacksize;

s.stacksize+=STACKINCREMENT;

}

*s.top++=e;

returnok;

}

statuspop(sqstack&s,SElemType&e){

if(s.top==s.base)return0;

e=*--s.top;

returnok;

}

typedefstruct{

SElemType*base;

SElemType*top;

intstacksize;

}SqStack;

typedefstructQNode{

QElemTypedata;

structQNode*next;

}QNode,*QueuePtr;

typedefstruct{

QueuePtrfront;//队头指针

QueuePtrrear;

}LinkQueue;

intInitQueue(LinkQueue&Q){

//构造一个空队列Q

Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));

if(!

Q.front)exit(0);

Q.front->next=NULL;

return1;

}

intEnQueue(LinkQueue&Q,QElemTypee){

//插入元素e为Q的新的队尾元素

QueuePtrp;

p=(QueuePtr)malloc(sizeof(QNode));

if(!

p)exit(0);

p->data=e;p->next=NULL;

Q.rear->next=p;

Q.rear=p;

return1;

}

intDeQueue(LinkQueue&Q,QElemType&e){

//若队列不空,则删除Q的队头元素,用e返回其值,并返回OK;否则返回ERROR

QueuePtrp;

if(Q.front==Q.rear)return0;

p=Q.front->next;

e=p->data;

Q.front->next=p->next;

if(Q.rear==p)Q.rear=Q.front;

free(p);

return1;

}

voidinput(sqstack&s,LinkQueue&q){

intflag=0;

charc;

count=0;

printf("请输入一串字符,按回车结束输入!

\n");

fflush(stdin);/*清除缓冲*/

while((c=getchar())!

='\n')

{

push(s,c);

EnQueue(q,c);

count++;

}

printf("你共输入了%d个元素\n",count);

}

voidcheck(sqstack&s,LinkQueue&q){

chare1,e2;

inti,key=0;

for(i=1;i<=count/2;i++)

{

pop(s,e1);

DeQueue(q,e2);

if(e1==e2)

{

key++;

}

}

if(key==count/2)

{

printf("是回文\n");

printf("\n按任意键继续\n");

getch();

}

else

{

printf("不是回文\n");

printf("\n按任意键继续\n");

getch();

}

}

voidmain()

{

intc;

do

{

system("cls");

printf("################实验二判断回文################\n\n");

printf("按1进行输入和判断按0退出\n");

scanf("%d",&c);

if(c)

{

sqstacks;

LinkQueueq;

InitQueue(q);

initstack(s);

input(s,q);

check(s,q);

}

elseexit(0);

}while(c);

printf("你已经退出,再见\n");

}

5、实验结果及分析

栈输入十进制的非负数52

转化为二进制110100

转化为八进制64

转化为十六进制34

队列输入字符串adfgfh不是回文

 

……………………………………装………………………………………订…………………………………………线………………………………………

实验名称遍历二叉树同组人

专业班级计科14--2学号2014101952姓名王晓姝成绩

一、实验目的:

1,掌握遍历二叉树的先序,中序,后序

2,掌握叶子结点的算法

二实验内容

遍历二叉树的先序,中序,后序递归排序和计算叶子结点。

三、实验环境:

MicrosoftVisualC++6.0

四主要算法

#include

#include

#include

#include

#include

#include

#definemaxsize1000

typedefcharelemtype;

typedefstructbitree{

elemtypedata;

structbitree*lchild,*rchild;

}BiTree,*TBiTree;

#defineSTACK_INIT_SIZE100

#defineSTACKINCREMENT10

#defineselemtypeTBiTree

#definestatusint

#defineok1

intcount;

typedefstruct{

selemtype*base;

selemtype*top;

intstacksize;

}sqstack;

statusinitstack(sqstack&s){

s.base=(selemtype*)malloc(STACK_INIT_SIZE*sizeof(selemtype));

if(!

s.base)exit(0);

s.top=s.base;

s.stacksize=STACK_INIT_SIZE;

returnok;

}

statusstackempty(sqstacks){

if(s.top==s.base)return1;

return0;

}

statuspush(sqstack&s,selemtypee){

if(s.top-s.base>=s.stacksize){

s.base=(selemtype*)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(selemtype));

if(!

s.base)exit(0);

s.top=s.base+s.stacksize;

s.stacksize+=STACKINCREMENT;

}

*s.top++=e;

returnok;

}

statuspop(sqstack&s,selemtype&e){

if(s.top==s.base)return0;

e=*--s.top;

returnok;

}

BiTree*create()

{BiTree*q[100];//定义q数组作为队列存放二叉链表中结点,100为最大容量

BiTree*s;//二叉链表中的结点

BiTree*root;//二叉链表的根指针

intfront=1,rear=0;//定义队列的头、尾指针

charch;//结点的data域值

root=NULL;

printf("请输入一组字符,按#结束\n");

cin>>ch;

while(ch!

='#')//输入值为#号,算法结束

{s=NULL;

if(ch!

=',')//输入数据不为逗号,表示不为虚结点,否则为虚结点

{s=newBiTree;

s->data=ch;

s->lchild=NULL;

s->rchild=NULL;

}

rear++;

q[rear]=s;//新结点或虚结点进队

if(rear==1)

{root=s;count++;}

else

{if((s!

=NULL)&&(q[front]!

=NULL))

{if(rear%2==0)

{q[front]->lchild=s;count++;}//rear为偶数,s为双亲左孩子

else

{q[front]->rchild=s;count++;}//rear为奇数,s为双亲右孩子

}

if(rear%2==1)front++;//出队

}

cin>>ch;

}

returnroot;

}

intvisit(charc){//遍历

printf("%c",c);

return1;

}

intdpreordertraverse(TBiTreet){//递归先序

if(t){

visit(t->data);

dpreordertraverse(t->lchild);

dpreordertraverse(t->rchild);

return0;

}

elsereturn1;

}

intdinordertraverse(TBiTreet){//递归中序

if(t){

dinordertraverse(t->lchild);

visit(t->data);

dinordertraverse(t->rchild);

return0;

}

elsereturn

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

当前位置:首页 > 高等教育 > 管理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1