数据结构课内实验报告.docx
《数据结构课内实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构课内实验报告.docx(8页珍藏版)》请在冰豆网上搜索。
数据结构课内实验报告
数据结构课内实验报告
2013年11月22日
目录
实验一结构体编程1
1算法思想描述1
2操作算法的实1
3主测试程序1
4运行结果2
实验二线性表3
1算法思想描述3
2操作算法的实现3
3主测试程序5
4运行结果5
实验三堆栈6
1算法思想描述6
2操作算法的实现6
3主测试程序7
4运行结果7
实验四队列7
1算法思想描述7
2操作算法的实现7
3主测试程序8
4运行结果8
实验一结构体编程
1实验内容
编程在屏幕上模拟一个秒表的显示。
要求:
秒表对应的数据类型用结构体定义,关于秒表的三个函数功能为:
更新秒表时间、显示秒表时间、设置秒表间隔。
2算法思想描述
3操作算法的实
4主测试程序
#include
#include
structclock
{
inthour;
intminute;
intsecond;
};
structclockCLOCK;
voidUpdate(void)
{
CLOCK.second++;
if(CLOCK.second==60)
{
CLOCK.second=0;
CLOCK.minute++;
}
if(CLOCK.minute==60)
{
CLOCK.minute=0;
CLOCK.hour++;
}
if(CLOCK.hour==24)
{
CLOCK.hour=0;
}
}
voidDisplay(void)
{
printf("%2d:
%2d:
%2d\r",CLOCK.hour,CLOCK.minute,CLOCK.second);
}
voidDelay(void)
{
longt;
for(t=0;t<500000;t++)
{
}
}
main()
{
longi;
CLOCK.hour=CLOCK.minute=CLOCK.second=0;
for(i=0;i<1000;i++)
{
Update();
Display();
Delay();
if(i==1000-1)
{
printf("%2d:
%2d:
%2d\r\n",CLOCK.hour,CLOCK.minute,CLOCK.second);
system("pause");
}
}
}
5运行结果
实验二线性表
1实验内容
编写不带头结点单链表的插入操作和删除操作算法。
2算法思想描述
3操作算法的实现
#include
#include
structclist
{
intnum;
structclist*next;
};
typedefstructclistnode;
typedefnode*clink;
voidPrintlist(clinkhead)
{
clinkptr;
if(head==NULL)
{
printf("\n");
}
else
{
ptr=head;
do
{
ptr=ptr->next;
printf("[%d]",ptr->num);
}while(ptr!
=head);
printf("\n");
}
}
clinkInsertnode(clinkhead,clinkptr,intx)
{
clinknewnode;
newnode=(clink)malloc(sizeof(node));
if(!
newnode)
{
returnNULL;
}
newnode->num=x;
newnode->next=NULL;
if(head==NULL)
{
head=newnode;
newnode->next=head;
}
else
{
if(ptr==NULL)
{
newnode->next=head->next;
head->next=newnode;
}
else
{
newnode->next=head->next->next;
head->next->next=newnode;
}
}
returnhead;
}
clinkFindnode(clinkhead,intx)
{
clinkptr,ptr1;
ptr1=NULL;
if(head==NULL)
{
returnNULL;
}
else
{
ptr=head;
do
{
if(ptr->num==x)
{
ptr1=ptr;
break;
}
ptr=ptr->next;
}while(ptr!
=head);
returnptr1;
}
}
clinkDeletnode(clinkhead,clinkptr)
{
clinkptr1;
ptr1=head;
if(head->next==head)
{
head=NULL;
}
else
{
while(ptr1->next!
=ptr)
{
ptr1=ptr1->next;
}
ptr1->next=ptr1->next->next;
if(ptr==head)
{
head=ptr1;
}
}
returnhead;
}
voidFreelist(clinkhead)
{
clinkptr,ptr1;
ptr1=head;
do
{
ptr=head->next;
head=head->next->next;
free(ptr);
}while(ptr!
=ptr1);
}
voidmain()
{
intarry[6]={9,7,3,4,5,6};
inti,num;
clinkhead,ptr;
head=NULL;
head=Insertnode(head,head,arry[0]);
if(!
head)
{
printf("内存分配错误\n");
exit
(1);
}
printf("创建第一节点-->");
Printlist(head);
head=Insertnode(head,NULL,arry[1]);
printf("插入第一节点钱-->");
Printlist(head);
for(i=2;i<6;i++)
{
head=Insertnode(head,head,arry[i]);
printf("插入节点之后");
Printlist(head);
}
while
(1)
{
printf("请输入查询值-->");
scanf("%d",&num);
if(num<0)
{
exit
(1);
}
else
{
ptr=Findnode(head,num);
if(ptr==NULL)
{
printf("找不到相应的编号\n");
continue;
}
head=Deletnode(head,ptr);
printf("删除后的链表-->");
Printlist(head);
}
}
Freelist(head);
}
4主测试程序
5运行结果
实验三堆栈
1实验内容
编写一算法实现对于键盘输入的任意一个非负的十进制整数,打印输出与其等值的八进制整数。
2算法思想描述
3操作算法的实现
#include
intresult[10]={0};
intindex=0;
//十进制和8进制的转换
voidzhuan(intn,intjin)
{
while(n>0)
{
result[index++]=n%jin;
n=n/jin;
}
}
intmain(intargc,char*argv[])
{
intx,y;
printf("请输入十进制数和转换进制:
");
scanf("%d%d",&x,&y);
zhuan(x,y);
//从高位输出
for(intj=index-1;j>=0;j--)
printf("%d",result[j]);
printf("\n");
}
4主测试程序
5运行结果
实验四队列
1实验内容
编程序判断一个字符序列是否是回文。
2算法思想描述
3操作算法的实现
#include
#include
voidmain()
{
chars[81];
inti;
gets(s);
for(i=0;iif(s[i]!
=s[strlen(s)-1-i])break;
if(i>=strlen(s)/2)
printf("yes!
\n");
else
printf("no!
\n");
}
4主测试程序
5运行结果