作业
第一章
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获取外部视频总的时间长度 和视频已播放的时间长度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)