当前位置:首页 >> 其它课程 >> 第三章队列 张永强 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


更多相关文档:

第三章队列 张永强 08号

第三章队列 张永强 08号 隐藏>> 实 验 报 告 单 姓名:张永强 学号:201004230108 班级:2010 级信息与计算科学 实验课程:数据结构(C 语言版) 实验题目:用结构...

10.张永强

第三章队列 张永强 08号 5页 免费 002第一课第二框《关于世... 1页 1下载...张永强??1,2 陈立 1,2 王翠荣 1,2 (1.上海东昊测试技术有限公司,上海 ...

张永强毕业设计

张永强的论文 暂无评价 40页 10财富值 第三章队列 张永强 08号 5页 免费 002...固端弯矩第一次分配 计算过程见图 2——7(括号中为不平衡弯矩) (a) 顶层 ...

2013级军训方案

第三章 军训的组织实施 第四条 学生军训工作要加强...张永强 7 王世海 曾丽亚 8 黄琼跃 团委干部 工作...队列条令纠正 军训会操 注:15 号为体检和发放军训...
更多相关标签:
第三章栈和队列 | 第三章栈和队列自测题 | 张永强 | 运城狼帮张永强老婆 | 张永强 我爱我家 | 张永强少将 | 广州军区少将张永强 | 演员张永强 |
网站地图

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