还剩6页未读,继续阅读
文本内容:
实验报告课程数据构造实验名称实验二堆栈和队列****实验日期2022/10/18实验二堆栈和队列实验目的熟悉栈这种特殊线性构造的特性;
1..熟练并掌握栈在顺序存储构造和链表存储构造下的根本运算;
2.熟悉队列这种特殊线性构造的特性;
3.熟练掌握队列在链表存储构造下的根本运算4实验原理堆栈顺序存储构造下的根本算法;堆栈链式存储构造下的根本算法;队列顺序存储构造下的根本算法;队列链式存储构造下的根本算法;实验内容3-18链式堆栈设计要求1用链式堆栈设计实现堆栈,堆栈的操作集合要求包括初始化,非空Stackinitiate[S否入栈出栈〔〕,取栈顶数据元素设计一StackNotEmptyS,StackiPushS,*,StackPop S,d StackTopSd;2个主函数对链式堆栈发展测试测试方法为挨次把数据元素入栈,然后出栈并在屏幕上显1,2,3,4,5示出栈的数据元素;定义数据元素的数据类型为如下形式的构造体,3Typedef structchartaskName[10J;int taskNo;JDataType;首先设计一个包含个数据元素的测试数据,然后设计一个主函数对链式堆栈发展测试,测试方法为5挨次吧个数据元素入栈,然后出栈并在屏幕上显示出栈的数据元素5对顺序循环队列,常规的设计方法是使用文寸尾指针和对头指针,对尾指针用于指示当前的女寸3-19尾位置下标,对头指针用于指示当前的女寸头位置下标现要求〕设计一个使用对头指针和计数器的顺序循环队列抽象数据类型,其中操作包括初始化,入队1列,出队列,取对头元素和判断队列是否为空;编写一个主函数发展测试2实验结果3-18typedefstructsnodeDataTypedata;struct snxle*ne*t;}LSNode;/*初始化操作*/void StackInitiateLSNode**head/*初始化带头结点链式堆栈*/iK*head=LSNode*mallocsizeofiJJSNode=NULL e*itl;*head-ne*t=NULL;/*判非空操作*/int StackNotEmptyLSNode*head/*判堆栈是否非空,非空返回空返回1;0*/ifithead-ne*t=NULL return0;elseretuml;浮入栈操作*/int StackPushLSNode*head DataType*/*把数据元素*插入链式堆栈的栈顶作为新的栈顶*/headLSNode*p;ifp=LSNode*mallocsizeofiOLSNode=NULL内存空间缺乏无法插入!printif VT;retumO;pdata=*;/*新结点链入栈顶*/p-ne*t=head-ne*t;/*新结点成为新的栈顶*/head-ne*t=p;return1;/*出栈操作*/int StackPopLSNode*head,DataType*d/“出栈并把栈顶元素由参数带回*/d二LSNode*p head-ne*t;ifp==NULL堆栈已空出错!printfC retumO;二/*删除原栈顶结点*/head-ne*t p-ne*t;/*原栈顶结点元素赋予*d=p-data;d*/freep;/*释放原栈顶结点内存空间*//*取栈顶数据元素操作*/return1;int StackTopLSNode*head,DataType*d/*取栈顶元素并把栈顶元素由参数带回*/d二LSNode*p head-ne*t;ifp=NULL{堆栈已空出错!”;prints retumO;*d=j»data;return1;/*撤销*/void DestroyLSNode*headLSNode*p,*pl;二p head;whilep!=NULLPl=P;p=p-ne*t;freepl;主函数程序}2*includestdio.h*includestdlib.htypedefint DataType;include”LinStack.h”void mainvoid{LSNode*myStack;inti,*;StackInitiatemyStack;fori=0;i5;i-H-{ifStackPushmyStack,i+l=0printfeiTor!\n;return;ifStackTopmyStack,*=0printfijerror!\n;return;elseprintfHThe elementoflocaltopis:%d\n”,;prints nThesequenceofoutingelementsis:\n;whileStackNotEmptymyStackStackPopmyStack,*;printff%dprintfM\nn;DestroymyStack;prints Thisprogram is made byl0273206\nn;运行结果为设计构造体和测试函数如下3*includestdio.h^includestdlib.hJ1includemalloc.htypedefstruct{chartaskName[10J;inttaskNo;JDataType;*includenLinStackhuvoidmain{LSNode*myStack;徇;FILEDataTypetask,*;忏if fopentaskI*t”,T=NULL{不能翻开文件printf taskfW;e*itO;StackInitiatemyStack;while!feoffp{fecanfijp%s%d\task.taskName,task.taskNo;StackPushmyStack,task;}fclosefp;whileStackNotEmptymy Stack{StackPopmyStack*;printfT%s%d\n,*.taskNaine,*.taskNo;}DestroymyStack;piintf^This pingramis madeby10273206\nn;}运行结果为3-19⑴typedefstructDataType queue[Ma^QueueSize];/*队头指针*/int front;/*计数器*/int count;}SeqCQueue;/*初始化操作QuoieInitiateSeqCQueue*Q*/void QueueInitiateSeqCQueue*Q/*初始化顺序循环队列Q*//*定义初始队头指针下标*/Q-front=0;/*定义初始计数器值*/Q-count=0;}/*判非空否操作QueueNotEmptySeqCQueue Q*/int QueueNotEmptySeqCQueueQ/*判断顺序循环队列非空否,非空时返回否则返回Q1,0*/ifQ.count!=0retum1;elseretumO;/*入队列操作QueueAppendSeqCQueue*Q,DataType**/int QueueAppendSeqCQueue*Q,DataType*/*把数据元素*插入顺序循环队列的队尾,成功时返回否则返回〉Q1,0*/{ifQ-count=Ma*QueueSizeprintfMThequeueisfull!\nn;retumO;}else{intr;r=Q-front+Q-count;Q-queue[iJ=*;Q-count++;return1;}}/*出队列操作QueueDeleteSeqCQueue*Q,DataType*d*/int QueueDeleteSeqCQueue*Q,DataType*d/*删除顺序循环队列队头数据元素并赋值成功时返回否则返回d,1,0*/{ifQ-count==0printfiCThe queueisempty!\nn;retumO;else*d=Q-queue[Q-frontJ;Q-front=Q-front+1%Ma*QueueSize;Q-count-;return1;/*取对头数据元素操作QueueGetSeqCQueue Q,DataType*d*/int QueueGetSeqCQueueQ,DataType*d/*取顺序循环队列队头数据元素并赋值成功时返回否则返回d,1,0*/{加Q.count=0printfifMThe queueisempty!\nn;retumO;else*d=Q.queue[Q.front];return1;}⑵主函数程序:*includestdio.h*define Ma*QueueSize100typedefint DataType;*includeHSeqQueue.hnvoidmainvoidinti,j,d;SeqCQueue myQueue;QueueInitiatemyQueue;ifQueueNotEmptymyQueue==0printf”队列为空!请输入数据元素\n”;/*判空*/foii=0;i=10;i++z.ifQueueAppendmyQueue,i+1=0break;}一printf元素个数为%d\n”,myQueue.count;forj=0u=9y++/*输出元素个数*/ifQueueDeletemyQueue,d==O break;printft;%d;d;printf,,\nH;/*出队列并显示元素*/ifQueueNotEmptymyQueue==1printf队列不为空\n;/*再次判空*/运行结果为printfThis programismadeby l27326\n;总结与思量对于堆栈和队列实验的操作,我明白了栈和队列这两种特殊线性构造的特性,初步掌握了栈在顺序存储构造和链表存储构造下的根本运算顺序循环队列中初始化,入队列,出队列,取对头元素和判断队列是否为空是关键此次实验之后我的逻辑又得到了进一步加强Z.。