当前位置:首页 >> 其它课程 >> 第三章队列 张永强 08号

第三章队列 张永强 08号












姓名:张永强 学号:201004230108 班级:2010 级信息与计算科学 实验课程:数据结构(C 语言版) 实验题目:用结构体实现数组的插入、删除; 实验日期: (2012 年 9 月 17 日) 指导老师: (马涛)

实验

内容及具体步骤:
1.实验目的及要求 实验目的: 1、 熟悉 C 语言运行环境。 2、 熟悉数组的操作。 3、 处理较复杂一点的问题

实验要求:
1、 用结构体实现数组的插入、删除; 2、 程序代码: #include<stdio.h> #include<malloc.h> #include<stdlib.h> #define OK 1 #define NULL 0 #define OVERFLOW 0 #define TRUE 1 #define FALSE 0 typedef int Status; typedef int QElemType; /* 单链队列--队列的链式存储结构 */ typedef struct QNode { QElemType data; struct QNode *next; }QNode,*QueuePtr; typedef struct { QueuePtr front,rear; /* 队头、队尾指针 */ }LinkQueue;

/* 链队列(存储结构定义)的基本操作(9 个) */ Status InitQueue(LinkQueue *Q) { /* 构造一个空队列 Q */ (*Q).front=(*Q).rear=(QueuePtr)malloc(sizeof(QNode)); if(!(*Q).front) exit(OVERFLOW); (*Q).front->next=NULL; return OK; } Status DestroyQueue(LinkQueue *Q) { /* 销毁队列 Q(无论空否均可) */ while((*Q).front) { (*Q).rear=(*Q).front->next; free((*Q).front); (*Q).front=(*Q).rear; } return OK; } Status ClearQueue(LinkQueue *Q) { /* 将 Q 清为空队列 */ QueuePtr p,q; (*Q).rear=(*Q).front; p=(*Q).front->next; (*Q).front->next=NULL; while(p) { q=p; p=p->next; free(q); } return OK; } Status QueueEmpty(LinkQueue Q) { /* 若 Q 为空队列,则返回 TRUE,否则返回 FALSE */ if(Q.front==Q.rear) return TRUE; else return FALSE; }

int QueueLength(LinkQueue Q) { /* 求队列的长度 */ int i=0; QueuePtr p; p=Q.front; while(Q.rear!=p) { i++; p=p->next; } return i; } Status GetHead_Q(LinkQueue Q,QElemType *e) { /* 若队列不空,则用 e 返回 Q 的队头元素,并返回 OK,否则返回 ERROR */ QueuePtr p; if(Q.front==Q.rear) return FALSE; p=Q.front->next; *e=p->data; return OK; } Status EnQueue(LinkQueue *Q,QElemType e) { /* 插入元素 e 为 Q 的新的队尾元素 */ QueuePtr p=(QueuePtr)malloc(sizeof(QNode)); if(!p) /* 存储分配失败 */ exit(OVERFLOW); p->data=e; p->next=NULL; (*Q).rear->next=p; (*Q).rear=p; return OK; } Status DeQueue(LinkQueue *Q,QElemType *e) { /* 若队列不空,删除 Q 的队头元素,用 e 返回其值,并返回 OK,否则返回 ERROR */ QueuePtr p; if((*Q).front==(*Q).rear) return FALSE; p=(*Q).front->next; *e=p->data; (*Q).front->next=p->next;

if((*Q).rear==p) (*Q).rear=(*Q).front; free(p); return OK; } Status QueueTraverse(LinkQueue Q,void(*vi)(QElemType)) { /* 从队头到队尾依次对队列 Q 中每个元素调用函数 vi()。一旦 vi 失败,则操作失败 */ QueuePtr p; p=Q.front->next; while(p) { vi(p->data); p=p->next; } printf("\n"); return OK; } void visit(QElemType i) { printf("%d ",i); } void main() { int i; QElemType d; LinkQueue q; i=InitQueue(&q); if(i) printf("InitQueue success!\n"); printf("Queue empty or not?%d(1:empty 0:not empty) ",QueueEmpty(q)); printf("The length of Queue is %d\n",QueueLength(q)); EnQueue(&q,-5); EnQueue(&q,5); EnQueue(&q,10); printf("After insert(-5,5,10),The length of Queue is %d\n",QueueLength(q)); printf("Queue empty or not?%d(1:empty 0:not empty) ",QueueEmpty(q)); printf("Output the Queue in term is:"); QueueTraverse(q,visit); i=GetHead_Q(q,&d); if(i==OK) printf("The front of Queue is: %d\n",d);

DeQueue(&q,&d); printf("After delete the front ElemType%d\n",d); i=GetHead_Q(q,&d); if(i==OK) printf("The new front of Queue is: %d\n",d); ClearQueue(&q); printf("After clear the Queue,q.front=%u q.front->next=%u\n",q.front,q.rear,q.front->next); DestroyQueue(&q); printf("After destory the Queue,q.front=%u q.rear=%u\n",q.front, q.rear); } 3 实验结果

q.rear=%u


更多相关文档:

2013级军训方案

第三章 军训的组织实施 第四条 学生军训工作要加强...张永强 7 王世海 曾丽亚 8 黄琼跃 团委干部 工作...队列条令纠正 军训会操 注:15 号为体检和发放军训...
更多相关标签:
张永强 | 运城狼帮张永强老婆 | 张永强 我爱我家 | 演员张永强 | 宁国张永强 | 运城狼帮张永强简历 | 张永强 居民身份证 | 陕西师范大学 张永强 |
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com