软件技术基础上机实验三_精品文档.docx

上传人:b****1 文档编号:222034 上传时间:2022-10-06 格式:DOCX 页数:10 大小:116.07KB
下载 相关 举报
软件技术基础上机实验三_精品文档.docx_第1页
第1页 / 共10页
软件技术基础上机实验三_精品文档.docx_第2页
第2页 / 共10页
软件技术基础上机实验三_精品文档.docx_第3页
第3页 / 共10页
软件技术基础上机实验三_精品文档.docx_第4页
第4页 / 共10页
软件技术基础上机实验三_精品文档.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

软件技术基础上机实验三_精品文档.docx

《软件技术基础上机实验三_精品文档.docx》由会员分享,可在线阅读,更多相关《软件技术基础上机实验三_精品文档.docx(10页珍藏版)》请在冰豆网上搜索。

软件技术基础上机实验三_精品文档.docx

姓名:

吴振国学号:

2011019190006

上机实验三

题目一:

一、程序流程说明

(1)创建一个链栈,

(2)编写输出,进栈出站函数,(3)编写主函数

二、程序代码

#include

#include

#defineLENsizeof(node_type)

typedefstructnode

{

intdata;

structnode*next;

}node_type;

typedefstruct{

node_type*top;

intlength;

}lstack_type;

lstack_type*create_list(void)

{

lstack_type*p;

p=(lstack_type*)malloc(sizeof(lstack_type));

p->top=NULL;

p->length=0;

return(p);

}

voidprint(node_type*head)

{

node_type*p;

printf("Now,thoserecordsare:

\n");

p=head;

if(head!

=NULL)

{

do{

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

p=p->next;

}

while(p!

=NULL);

}

}

intpush(lstack_type*lp,intx)

{node_type*p;

p=(node_type*)malloc(LEN);

if(p!

=NULL)

{ p->data=x;

p->next=lp->top;

lp->top=p;

lp->length++;

return

(1);

}

elsereturn(0);

}

intpop(lstack_type*lp)

{

node_type*p;

intx;

if(lp->top==NULL){

printf("stackisunderflow");

return(0);

}

else{

x=lp->top->data;

p=lp->top;

lp->top=lp->top->next;

lp->length--;

free(p);

return(true);

}

}

voidmain()

{

lstack_type*p1;

inta=0,b=0,m=0;

p1=create_list();

printf("\ninputthenumbers:

\n");

scanf("%d",&m);

while(m!

=0)

{push(p1,m);

scanf("%d",&m);

}

print(p1->top);

pop(p1);

pop(p1);

print(p1->top);

}

三:

典型测试数据(输入):

246943

应输出(上机前自己分析的结果):

439642出栈后642

四:

上机时遇到的问题:

①不能输出解决办法:

更改函数返回类型

②编译出错解决办法:

输入数据时“&”不要忘

五:

实际运行结果

六、小结&体会

链栈的使用很方便,比顺序栈更好操作。

题目二:

一、程序流程说明

(1)创建一个循环队列

(2)编写出队列函数,入队列函数,和负数删除函数

(3)编写主函数

二、程序代码

#include

#defineN20

typedefstruct

{intdata[N];

intfront,rear;

}queue_type;

voidcreate_list(queue_type*lp)

{

inti,elem;

lp->front=0;lp->rear=0;

printf("\npleaseinputdatasofthelist\n");

lp->data[0]=NULL;

for(i=1;i

{

scanf("%d",&elem);

if(elem==-1)break;

lp->data[i]=elem;

lp->rear++;

}

}

voidprintlist(queue_type*lp)

{

inti,j=0;

printf("\nTheserecordsare:

\n");

if(lp->rear<=0)

{

printf("Nodata!

\n");

return;

}

else

for(i=lp->front+1;i<=lp->rear;i++)

{

printf("%4d",lp->data[i]);

}

}

voidenqueue(queue_type*q,intx)

{

q->rear=(q->rear+1)%N;

q->data[q->rear]=x;

}

intdequeue(queue_type*q)

{

inti;

i=q->front;

q->front=(q->front+1)%N;

/*printlist(q);*/

return(q->data[i+1]);

}

voidaa(queue_type*lp){

inti,l=lp->rear,j;

printf("long=%4d",lp->rear);

for(i=lp->data[lp->front+1];i<=l+1;i++){

j=dequeue(lp);

if(j>0)

enqueue(lp,j);

}

}

main()

{

queue_typep;

create_list(&p);

printlist(&p);

aa(&p);

printf("afterdeletetelistis:

\n");

printlist(&p);

}

三、测试数据*

输入:

23-46-58-97-1020(-1)

应输出:

2368720

四:

上机时遇到的问题:

①负数不能完全删除解决办法:

更改循环,使每一个数都能与0比较,是负数则删除(调用出队列函数)

五、实际运行结果:

六、小结&体会

循环队列的使用能是空间更加合理的被利用。

题目三:

一、程序流程说明

(1)编写两个pop函数,两个pus函数

(2)编写主函数

二、程序代码

#include

#defineM10

#definetrue1

#definefalse0

typedefstruct{

intdata[M];

inttop1,top2;

}stack_type;

intpush1(stack_type*s)

{

intx;

printf("请输入数据(以’0‘结束):

\n");

scanf("%d",&x);

while(x!

=0&&s->top1<=s->top2)

{

s->data[s->top1]=x;

s->top1=s->top1+1;

scanf("%d",&x);

}

if(s->top1==s->top2)

printf("栈已满!

\n");

return;

}

intpush2(stack_type*s)

{

intx;

printf("请输入数据(以’0‘结束):

\n");

scanf("%d",&x);

while(x!

=0&&s->top1<=s->top2)

{

s->data[s->top2]=x;

s->top2=s->top2-1;

scanf("%d",&x);

}

if(s->top1==s->top2)

printf("栈已满!

\n");

return;

}

intpop1(stack_type*s)

{

intout;

if(s->top1<0)return(false);

else

{

out=s->data[s->top1-1];

s->top1=s->top1-1;

return(out);

}

}

intpop2(stack_type*s)

{

intout;

if(s->top2>=M)return(false);

else

{

out=s->data[s->top2+1];

s->top2=s->top2+1;

return(out);

}

}

voidmain()

{

inti,j,k;

stack_typeas,*lp;

lp=&as;

lp->top1=0;

lp->top2=M-1;

while

(1)

{

printf("请选择你要操作的栈:

输入“1”或“2”\n");

printf("返回“0”\n");

scanf("%d",&i);

if(i==1)

{

printf("请选择你要进行的操作:

入栈“1”;出栈“2”\n");

scanf("%d",&k);

switch(k)

{

case1:

push1(lp);

break;

case2:

j=pop1(lp);

printf("出栈元素为:

%d\n",j);

break;

default:

printf("输入错误!

\n");

}

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

当前位置:首页 > 教学研究 > 教学案例设计

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

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