数据结构 队列

数据结构 队列,第1张

作业

第一章

1. 编写一个算法,判断浮点数数组a[]中是否有值大于1000的成员。若有,则给出大于1000的成员中下标最小那个成员的下标。指出算法中的基本 *** 作和关键 *** 作,分析你的算法的时间复杂性,并用大O记法表示之。

2. 斐波那契数列定义为: 给出一个计算第 个斐波那契数的非递归的算法,指出算法中的基本 *** 作,分析你的算法的时间复杂性并用大O记法表示之。

第二章

1. 对线性表(18,8,21,7,3),画出相应的带表头结点的双向循环链表。

2. 编写一个算法,在带表头结点的有序单链表中,插入值为 的结点,并使新的链表仍然有序。

第三章

1. 请编写一个算法,把一个队列逆置,在算法中可以使用栈,可以调用栈和队列的基本 *** 作,但不允许直接处理栈和队列中的元素。

2. 对于循环队列,

(1) 试写出求队列长度的算法;

(2) 试写出判断队列是否为空的算法。

第四章

1. 假设3维数组 以列序为主序的方式顺序存储,请为它推导出地址计算公式。

2. 编写一个算法,计算子串S2在串S1中的出现次数。

第五章

1. 请给出下图所示的树的前序、后序和层次遍历序列。

2. 已知某二叉树的前序序列和中序序列分别是ABDECFGH和DBEAGFHC,请画出该二叉树,并写出其后序序列。

3. 给定一棵以二叉链表形式存储的二叉树,root指向其根。请编写算法求二叉树的高度。

4. 给定一棵以二叉链表形式存储的二叉树,root指向其根。请编写算法求出二叉树中值为x的结点的数目。

5. 已知下图所示的二叉树是由某森林转换而来的。请给出原森林。

6. 假定有八个字符,它们出现的概率分别为:007、009、014、019、023、044、058和077。

(1)请给出这8个字符的哈夫曼树和哈夫曼编码;

(2)编码树的WPL的实际意义是什么?

第六章

1. 对于如下图所示的有向图,请给出

(1) 各顶点的入度和出度

(2) 强连通分量和弱连通分量

(3) 邻接矩阵

(4) 邻接表和逆邻接表

2. 假设有向图存储为邻接矩阵,请编写一个算法,求出指定顶点的入度和出度。

3. 对于如下图所示的无向图,分别画出其深度优先搜索和广度优先搜索生成的树。

4. 对下面的无向带权图应用求最短路经的Floyd算法,求出每对顶点之间的最短路径,并写出在算法的执行过程中所求得的各个矩阵。

5. 对如下图所示的无向带权图,按照Kruskal算法求出最小生成树,并画出每一步所得到的中间结果。

第七章

1. 试比较顺序查找算法和二分查找算法的特点、优缺点。

2. 请编写一个递归的二分查找算法。

3. 从一棵空的查找树开始,依次插入键值71,32,103,66,135,82,57,91,画出每次插入后所得到的查找树,再依次删除57、82、71,画出每次删除后所得到的查找树,并对最终得到的查找树求出等概率情况下的平均成功查找长度。

4. 请编写一个判断二叉树T是否为查找树的算法,假定二叉树T是以标准形式存贮的。

5. 从一个空的散列表开始,依次为插入关键字Jan、Feb、Mar、Apr、May、Jun、Jul、Aug、Sep、Oct、Nov、Dec,散列函数为 为关键字key第一个字母的序号,如 散列表长度为17。分别使用

(1) 线性探测法

(2) 链地址法

建立散列表。请分别画出散列表,并求出等概率情况下的平均成功查找长度。

第八章

1. 分别用下列排序算法对关键字序列(49,7,50,5,94,16,90,29,71)进行排序,写出每一趟排序所得到的中间结果。

(1) 直接插入排序

(2) 希尔排序

(3) 改进的冒泡排序

(4) 快速排序

(5) 直接选择排序

(6) 堆排序

(7) 合并排序

2. 一种冒泡排序算法是所谓“上浮式的”,即每趟排序都把较小的关键字“浮”到上面(数组下标较小的那一边)去。请编写一个改进的“下沉式的”冒泡排序算法。

3. 举例说明直接选择排序算法、快速排序算法和堆排序算法不是稳定的。

1

(1)循环队列的优点是相对于直线队列来讲的,直线队列在元素出队后,头指针向后移动,导致删除元素后的空间无法在利用,即使元素个数小于空间大小,依然无法再进行插入,即所谓的“假上溢”。当变成循环队列之后,删除元素后的空间仍然可以利用,最大限度的利用空间。综上:循环队列它可以克服顺序队列的"假上溢"现象,能够使存储队列的向量空间得到充分的利用。

(2)判断循环队列空和满有三种方法:第一,采用计数器来判断,空时,计数器为0,满时,计数器为maxsize;第二,另设一个布尔变量以匹别队列的空和满;第三,少用一个元素的空间,约定入队前,测试尾指针在循环意义下加1后是否等于头指针,若相等则认为队满(注意:rear所指的单元始终为空);

2Length=(rear-front+Maxsize)%Maxsize

rear和front是头尾指针,Maxsize为存储空间长度

3void BracketMatch(char str) / str[]中为输入的字符串,利用堆栈技术来检查该字符串中的括号是否匹配/

{

SeqStack S;

int i;

char ch;

InitStack(&S);

for(i=0; str[i]!='\0'; i++) /对字符串中的字符逐一扫描/

{

switch(str[i])

{

case '(':

Push(&S,str[i]);

break;

case ')':

if(IsEmpty(&S))

{

printf("\n右括号多余!");

return;

}

else

{

GetTop(&S,&ch);

if(Match(ch,str[i])) /用Match判断两个括号是否匹配/

Pop(&S,&ch); /已匹配的左括号出栈/

else

{

printf("\n对应的左右括号不同类!");

return;

}

}

}/switch/

}/for/

if(IsEmpty(&S))

printf("\n括号匹配!");

else

printf("\n左括号多余!");

}

这要看是什么格式的外部视屏了。

但无论是什么情况,都要把视频加载进来才能获得其长度。

如果你加载的是一个SWF格式的视屏动画,一般用Loader来加载SWF,加载完成后可以:

总帧数:MoveiClip(Loadercontent)totalFrames;

当前帧数:MoveiClip(Loadercontent)currentFrame;

对于FLV、F4V之类的格式的视屏,如果你用的是Flash中自带的FLAPlayBack或者自己用一个VideoPlayer来加载,可以这样:

总时间(秒):FLVPlayBacktotalTime; VideoPlayertotalTime;

当前时间(秒):FLVPlayBackplayheadTime; VideoPlayerplayheadTime;

//

/ 链式队列 /

//

#include "stdlibh"

#include "stdioh"

/ 定义链式队列类型 /

typedef int ElemType;

typedef struct QNode

{ ElemType data;

struct QNode next;

} QNode, QueuePtr;

typedef struct

{ QueuePtr front;

QueuePtr rear;

} LinkQueue;

/ 1、初始化链式队列 /

void InitQueue(LinkQueue Q)

{ Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));

if (!(Q->front)) exit(0);

Q->front->next=NULL; }

/ 2、销毁链式队列 /

void DestroyQueue(LinkQueue Q)

{ while (Q->front)

{ Q->rear=Q->front->next;

free(Q->front);

Q->front=Q->rear; }

}

/ 3、清空链式队列 /

void ClearQueue(LinkQueue Q)

{ QueuePtr p;

p=Q->front->next;

while (p)

{ Q->front->next=p->next;

free(p); }

Q->rear=Q->front;

}

/ 4、判断空队列 /

int QueueEmpty(LinkQueue Q)

{ if (Qfront==Qrear)

return 1;

else

return 0; }

/ 5、求链式队列长度 /

int QueueLength(LinkQueue Q)

{ QueuePtr p; int n=0;

p=Qfront;

while (p!=Qrear)

{ n++; p=p->next; }

return n;

}

/ 6、取队头元素 /

ElemType GetHead(LinkQueue Q)

{ if (Qfront!=Qrear)

return Qfront->next->data;

}

/ 7、入队列 /

void EnQueue(LinkQueue Q, ElemType e)

{ QueuePtr p;

p=(QueuePtr)malloc(sizeof(QNode));

if (!p) exit(0);

p->data=e; p->next=NULL;

Q->rear->next=p;

Q->rear=p; }

/ 8、出队列 /

void DeQueue(LinkQueue Q, ElemType e)

{ QueuePtr p;

if (Q->front!=Q->rear)

{ p=Q->front->next;

e=p->data;

Q->front->next=p->next;

if (Q->rear==p) Q->rear=Q->front;

free(p); }

}

/ 9、遍历链式队列并输出元素 /

void QueueTraverse(LinkQueue Q)

{ QueuePtr p;

printf("\nQueue: ");

p=Qfront->next;

while (p)

{ printf("%d\t",p->data);

p=p->next;}

}

/ 约瑟夫问题 /

void Joseffer(int n)

{ LinkQueue Q; int i; ElemType x;

InitQueue(&Q);

for(i=1; i<=n; i++)

EnQueue(&Q,i);

while (!QueueEmpty(Q))

{ for(i=1; i<=3; i++)

{ DeQueue(&Q,&x);

if (i!=3)

EnQueue(&Q,x);

else

printf("%5d",x);

}

}

}

/ 主函数 /

main()

{ LinkQueue Q; int i; ElemType x;

InitQueue(&Q);

for(i=2; i<=5; i++)

EnQueue(&Q,i);

printf("len:%d\n",QueueLength(Q));

while (!QueueEmpty(Q))

{ DeQueue(&Q,&x);

printf("%d\t",x); }

//QueueTraverse(Q);

//Joseffer(6);

}

自己去调试吧,这个是C语言版的链式队列,如果看不懂或者调不出来就去看书吧。否则你这门是白学了。

注:这里是链式队列

//

/ 循环队列 /

//

#include "stdlibh"

#include "stdioh"

#define N 100

/ 定义循环队列类型 /

typedef int ElemType;

typedef struct

{ ElemType base;

int front;

int rear;

} SqQueue;

/ 1、初始化循环队列 /

void InitQueue(SqQueue Q)

{ Q->base=(ElemType)malloc(Nsizeof(ElemType));

Q->front=Q->rear=0; }

/ 2、销毁循环队列 /

void DestroyQueue(SqQueue Q)

{ free(Q->base); }

/ 3、清空循环队列 /

void ClearQueue(SqQueue Q)

{ Q->front=Q->rear=0; }

/ 4、判断空队列 /

int QueueEmpty(SqQueue Q)

{ if (Qfront==Qrear)

return 1;

else

return 0; }

/ 5、求循环队列长度 /

int QueueLength(SqQueue Q)

{ return (Qrear+N-Qfront)%N; }

/ 6、取队头元素 /

void GetHead(SqQueue Q, ElemType e)

{ if (Qfront!=Qrear)

e=Qbase[Qfront];

}

/ 7、入队列 /

int EnQueue(SqQueue Q, ElemType e)

{ if ((Q->rear+1)%N==Q->front)

return 0;

Q->base[Q->rear]=e;

Q->rear=(Q->rear+1)%N;

return 1; }

/ 8、出队列 /

int DeQueue(SqQueue Q, ElemType e)

{ if (Q->front==Q->rear)

return 0;

e=Q->base[Q->front];

Q->front=(Q->front+1)%N;

return 1; }

/ 9、遍历循环队列并输出元素 /

void QueueTraverse(SqQueue Q)

{ int i;

printf("\nQueue: ");

if (Qrear<Qfront) Qrear=Qrear+N;

for(i=Qfront; i<Qrear; i++)

printf("%d\t",Qbase[i%N]); }

/ 主函数 /

main()

{ SqQueue Q; int i; ElemType x;

InitQueue(&Q);

for(i=2; i<=5; i++)

EnQueue(&Q,i);

printf("len:%d\n",QueueLength(Q));

while (!QueueEmpty(Q))

{ DeQueue(&Q,&x);

printf("%d\t",x); }

QueueTraverse(Q);

}

在给你个循环队列吧

以上就是关于数据结构 队列全部的内容,包括:数据结构 队列、c语言软件题、flash as3.0获取外部视频总的时间长度 和视频已播放的时间长度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9879588.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存