好文档 - 专业文书写作范文服务资料分享网站

数据结构实验最全顺序表的操作及其应用

天下 分享 时间: 加入收藏 我要投稿 点赞

文档来源为:从网络收集整理.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 #include

#include //包含strlen(s) 返回s的长度,不包括结束符NULL,碰到第一个字符串结束符'\\0'停止扫面 #define OK 1

#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版本可编辑.欢迎下载支持.

数据结构实验最全顺序表的操作及其应用

文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.}p->data=e;p->next=NULL;Q.rear->next=p;Q.rear=p;returnOK;}StatusDeQueue(LinkQueueQ,QElemType&e)//在队头删除元素{QNode
推荐度:
点击下载文档文档为doc格式
78bvf7slmp8xzko02xoc4ddq3430jm00ya6
领取福利

微信扫码领取福利

微信扫码分享