文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
}
p->data=e; p->next=NULL; Q.rear->next=p; Q.rear=p; return OK; }
Status DeQueue(LinkQueue Q,QElemType &e)//在队头删除元素 {
QNode *p;
if(Q.front==Q.rear) {
printf(\队列为空!\\n\ return ERROR; }
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 OutputQueue(LinkQueue Q)//输出元素 {
QNode *p;
if(Q.front==Q.rear) {
printf(\队列为空!\\n\ return ERROR; }
for(p=Q.front->next;p!=NULL;p=p->next) {
printf(\ }
printf(\ return OK; }
Status DestroyQueue(LinkQueue &Q)//销毁队列 {
while(Q.front) {
Q.rear=Q.front->next;
16文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
free(Q.front); Q.front=Q.rear; }
return OK; }
int main()//注意 {
char ch;
QElemType e; LinkQueue Q; while(1) {
system(\
printf(\ printf(\创建链队列 |\\n\ printf(\输出链队列 |\\n\ printf(\进队(插入元素) |\\n\ printf(\出队(删除元素) |\\n\ printf(\销毁队列 |\\n\ printf(\退出 |\\n\ printf(\ ch=getchar(); if(ch=='6') break; switch(ch) {
case '1':InitQueue(Q);
printf(\创建成功!\\n\
printf(\请输入队列的初始数据(按0结束):\\n\ while(e) {
scanf(\ if(!e)break; EnQueue(Q,e); }
printf(\按任何键继续···\\n\ getch(); break;
case '2':printf(\此时链队列是:\ OutputQueue(Q);
printf(\按任何键继续···\\n\ getch(); break;
case '3':printf(\此时链队列是:\
17文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
OutputQueue(Q);
printf(\请输入进队的元素:\ scanf(\ EnQueue(Q,e);
printf(\进队成功!\\n\ printf(\此时链队列是:\ OutputQueue(Q);
printf(\按任何键继续···\\n\ getch(); break;
case '4':printf(\此时链队列是:\ OutputQueue(Q); DeQueue(Q,e);
printf(\出队成功!\\n\ printf(\此时链队列是:\ OutputQueue(Q);
printf(\按任何键继续···\\n\ getch(); break;
case '5':DestroyQueue(Q);
printf(\销毁成功!\\n\
printf(\按任何键继续···\\n\ getch(); break; } }
getch(); return OK; }
运行截图:
主菜单: 1.
2.创建队列 3.输出原始队列 4.进队 5.出队
6.销毁队列
三、实验总结:
问题:1.在写主函数面main()时,总是忘记写();
2.声明*p时,原来用的是QueuePtr,但最后改成Qnode程序才正确; 实验心得:
(1) 掌握了队列这种抽象数据类型的特点,并能在相应的应用任务中正确选用
18文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
它;
队列是操作受限的线性表,是只允许仅在表的一端进行插入,而在另一端
进行删除操作的线性表。在队列中,允许插入的一端称为队尾(rear),允许删除的一端称为对头(front);
队列又称为先进先出(First In First Out)的线性表,简称FIFO结构。 因为它的修改是按先进先出的原则进行的。
(2) 掌握循环队列和链队列的基本操作实现算法,特别注意在循环队列中队满
和队空的描述方法。 实验五 串的操作及其应用
一、实验目的
1)掌握队列的基本定义;
2)掌握循环队列基本操作的实现;
3)掌握利用栈和循环队列进行回文字符串的判定。 二、实验内容:
⒈问题描述:本题目中的串编辑要求对串实现以下三种功能:
⑴插入:把一个字符串插入到给定串的指定位置
⑵删除:将串中某指定位置开始的若干字符从串中删除
⑶置换:用一串字符置换给定串中某指定位置开始的若干字符 ⒉基本要求
输入要求:首先输入功能标志符,表明要求实现何种功能,然后再输入有关数据 输入C, 表示要求根据用户输入的以回车为结束符的字符串建立顺序串 输入I,表示要求输入;然后输入插入的起始位置和要插入的字符串 输入D,表示要求删除;然后输入删除的起始位置和删除长度
输入R,表示要求置换 ;然后输入置换的起始位置、置换长度和将要换入的字符串 输入E,结束串编辑。 源程序code:
#include
#include
#define ERROR 0 #define OVERFLOW -1 typedef struct {
char *ch; //若是非空串,则按串长分配储存区,否则ch为NULL int length; //串长度 }HString;
//建立串 生成一个其值等于chars的串T int StrAssign(HString &T,char *chars)
19文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
{
int len=strlen(chars); //求串chars的长度len
if(T.ch) free(T.ch); //若T存在则释放T原有的空间 if(!len) //串常量chars为空 { printf(\所输入的字符串为空!\\n\ T.ch=NULL; T.length=0; } else { if(!(T.ch=(char *)malloc((len+1)*sizeof(char)))) exit(0); strcpy(T.ch,chars); //调用系统原有函数复制字符串,给T赋值 T.length=len; }
return 0; }
//返回串S的长度
int StrLength(HString S) { return S.length; }
//比较字符串
//若S>T,则返回值>0,若S=T,则返回值=0,若S //将字符串S清空 int ClearString(HString &S) { if(S.ch) { free(S.ch); S.ch=NULL; } S.length=0; 20文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
数据结构实验最全顺序表的操作及其应用
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)