太原理工大学现代科技学院数字测控实习报告 4.docx
- 文档编号:10512072
- 上传时间:2023-02-17
- 格式:DOCX
- 页数:28
- 大小:20.38KB
太原理工大学现代科技学院数字测控实习报告 4.docx
《太原理工大学现代科技学院数字测控实习报告 4.docx》由会员分享,可在线阅读,更多相关《太原理工大学现代科技学院数字测控实习报告 4.docx(28页珍藏版)》请在冰豆网上搜索。
太原理工大学现代科技学院数字测控实习报告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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 太原理工大学现代科技学院数字测控实习报告 太原 理工大学 现代科技 学院 数字 测控 实习 报告