1、3、实现循环队列的创建、进队、出队等基本操作(数据元素类型自己选取,如整型、字符型等),并实时给出队列的操作变化状态;4、实现链式队列的创建、进队、出队等基本操作(数据元素类型自己选取,如整型、字符型等),并实时给出队列的操作变化状态;(二)选做题(视自己能力而定,数量不限):任选一个或多个源程序(已经发给学委),并阅读、调试和运行程序,而后给出程序功能分析和实例运行演示;1、实现表达式求值算法程序;2、用递归算法实现汉诺塔问题算法程序;3、使用循环队列实现打印杨辉三角形算法程序。3 实验步骤与源程序 第一题:#include stdlib.h#define TRUE 1#define FAL
2、SE 0#define Size 50typedef struct int elemSize; int top;SeqStack;void InitStack(SeqStack *S) S-top =-1;int IsEmpty(SeqStack *S) return(S-top=-1?TRUE:FALSE);/判断栈空 为空是真 反之为假int IsFull(SeqStack *S) top=Size-1?/判断栈满 为满是真 反之为假int Push(SeqStack *S,int x)/压栈 if(S-top=Size-1) return(FALSE); S-top+;elemS-top
3、 = x; return(TRUE);int Pop(SeqStack *S,int *x)/弹出 top = -1) else *x = S-top;top-; return(TRUE); void main() SeqStack S; int x,y,i,l; InitStack(&S); if(!IsFull(&S) printf(栈空:n); printf(输入要压入的元素个数(50以内): scanf(%d,&l);输入要压入的元素: for(i=0;inext?FALSE;int InitStack(LinkStack *S) *S=(node*)malloc(sizeof(nod
4、e); if(NULL=*S) return FALSE; (*S)-next =NULL; return TRUE;int Push(LinkStack S, int x) LinkStackNode *temp; temp=(LinkStackNode *)malloc(sizeof(LinkStackNode); if(temp=NULL) return(FALSE); temp-data=x;next=S-next;next=temp;int Pop(LinkStack S, int *x) LinkStackNode * temp; temp=S- if(temp=NULL) nex
5、t=temp- *x=temp-data; free(temp); LinkStackNode *s;s); int x,i,l; if(IsEmpty(s)栈空 n请输入压入元素个数(50以内):请输入压入元素: Push(s,x);IsEmpty(s) Pop(s, & printf( 第三题:#define MAXSIZE 50 typedef struct int elementMAXSIZE; int front; int rear;SeqQueue;void InitQueue(SeqQueue *Q) Q-front=Q-rear=0;int EnterQueue(SeqQueu
6、e *Q, int x) if(Q-rear+1)%MAXSIZE=Q-front) elementQ-rear=x;rear=(Q-rear+1)%MAXSIZE;int DeleteQueue(SeqQueue *Q, int *x) if(Q-front=Q-rear) *x=Q-front;front=(Q-front+1)%MAXSIZE;int IsEmpty(SeqQueue *Q) return(TRUE); SeqQueue s; InitQueue(& if(IsEmpty (&s)此时为空队列n请输入进队元素个数n请输入元素n EnterQueue(&s,x);出队: D
7、eleteQueue(&s,&第四题:typedef struct Node struct Node *next;LinkQueueNode; LinkQueueNode *front ; LinkQueueNode *rear;LinkQueue;int IsEmpty(LinkQueue *Q) return Q-front =Q-rear?int InitQueue(LinkQueue *Q)front=(LinkQueueNode *)malloc(sizeof(LinkQueueNode);front!=NULL) Q-rear=Q-front;front-next=NULL; re
8、turn (TRUE); else return(FALSE);int EnterQueue(LinkQueue *Q,int x) LinkQueueNode *NewNode; NewNode=(LinkQueueNode *)malloc(sizeof(LinkQueueNode); if(NewNode! NewNode-rear-next=NewNode;rear=NewNode;int DeleteQueue(LinkQueue *Q,int *x) LinkQueueNode *p;rear) p=Q-next ;next =p-rear=p) *x=p- free(p); re
9、turn (TRUE); LinkQueue q;q); if(IsEmpty(&q)请输入进队元个数素n请输入元素:q,x);q,&4 测试数据与实验结果(可以抓图粘贴)5 结果分析与实验体会 开始在编写第一题时,将所有代码完成后一直报错,反复检查代码没有错误,后来看到头文件名是#include 因为C+习惯导致错误,后来改为就正确了,而且这些题目都是很基础的题目,在之后的编程中也遇到很多问题,如在第一题输出用printf(时,无报错,但输出是奇怪数值,绞尽脑汁都找不出问题所在,但是我注意到输出的数值都是一样的,猜测到可能是printf(中&x是错误,改为printf(后正确,可是还是说不出具体的原因,这些都表明自己的基础差,还需要多巩固基础知识。 通过这次试验编程,对栈及队列加深理解,熟记了一些代码,了解自己不足之处,收获不少。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1