(⊙o⊙)…我昨天看到了,写完代码之后找不到问题了
。一会儿回去把代码贴上来。
给你参考参考:
/Filename: mainc
/
#include <stdioh>
#include "queueh"
int main(void) {
int i;
queue que;
/
创建一个大小为10的队列,对队列进行入队,出队 *** 作
/
que = create_queue(10);
for ( i = 0; i < 10; i++ ) {
in_queue(que, i);
}
for ( i = 0; i < 5; i++ ) {
printf("%d\t", out_queue(que) );
}
printf("\n队列是否为空 ");
if ( is_empty(que) ) {
printf("TRUE\n");
} else {
printf("FALSE\n将队列置空\n");
set_queue_empty(que);
}
if ( is_empty(que) ) {
printf("队列为空\n");
}
free_queue(que);
return 0;
}
/
Filename: queuec
/
#include "queueh"
#include <stdlibh>
/
创建大小为size的循环队列
/
queue create_queue(size_t size) {
q_value temp = NULL;
queue que = NULL;
/
创建队列指针
/
que = ( queue )malloc( sizeof(struct _queue) );
que->size = size;
/
创建队列值,初始化为-1
/
que->rear = ( q_value )malloc( sizeof(struct _que_value) );
que->rear->value = -1;
temp = que->rear;
while ( --size ) {
que->front = ( q_value )malloc( sizeof(struct _que_value) );
que->front->next = temp;
que->front->value = -1;
temp = que->front;
}
/
头尾相连成为循环队列
/
que->rear->next = que->front;
que->rear = que->front;
return que;
}
/
将队列设置为空
/
void set_queue_empty(queue que) {
while ( que->front != que->rear ) {
que->rear->value = -1;
que->rear = que->rear->next;
}
que->front->value = -1;
que->front = que->rear;
}
/
判断队列是否为空
/
_bool is_empty(queue que) {
if ( que->front == que->rear &&
que->front->value == -1 )
return TRUE;
return FALSE;
}
/
判断队列是否为满了
/
_bool is_full(queue que) {
if ( que->front == que->rear &&
que->front->value != -1 )
return TRUE;
return FALSE;
}
/
出队,出队之后的位置用-1标记
/
int out_queue(queue que) {
int value = que->rear->value;
/
如果队列为空则返回-1
/
/
if ( is_empty(que) ) {
printf("队列为空\n");
return -1;
}
/
que->rear->value = -1;
que->rear = que->rear->next;
return value;
}
/
入队
/
void in_queue(queue que, int value) {
/
如果队列满则不能入队
/
/
if ( is_full(que) ) {
printf("队列已满\n");
return;
}
/
que->front->value = value;
que->front = que->front->next;
}
/
释放队列
/
void free_queue(queue que) {
q_value temp = que->front->next;
while ( ( que->size )-- ) {
free(que->front);
que->front = temp;
temp = temp->next;
}
free(que);
}
/
Filename: queueh
/
#ifndef _QUEUE_H_
#define _QUEUE_H_
#include <stdioh>
typedef int _bool;
#define FALSE ( 0 )
#define TRUE ( 1 )
typedef struct _que_value q_value;
typedef struct _queue queue;
struct _que_value {
int value;
q_value next;
};
struct _queue {
size_t size;
q_value front;
q_value rear;
};
queue create_queue(size_t size);
void free_queue(queue que);
void set_queue_empty(queue que);
_bool is_empty(queue que);
_bool is_full(queue que);
void in_queue(queue que, int value);
int out_queue(queue que);
#endif
1 错。给的条件能确定链表含1个元素,而非空。
2 错。
3 错。M阶B树要求(叶上)至少M/2个元素,上面所谓的叶就是倒数第二层了,而三阶平衡树最底层可以有1个元素。
1 下面程序段时间复杂度为________
for (int i=0;i<n;i++)
for (int j=0;j<k;j++ )
S+=i;
O(nk)
2 数据结构的存储结构包括顺序,________,索引和散列四种。
链接
3设森林T中有三棵树,第一,二,三棵树的结点个数分别为n1,n2,n3,将森林转换成二叉树后,其根结点的左子树上有________个结点。
n1-1。
森林转为二叉树之后,原第一棵树T1的根节点将成为二叉树Tn的根节点,其余的采取貌似于长兄如父的方式排列,原先是父子关系的还是步子,但是原先是兄弟的也变成了父子,对于其他树的根节点的有分支,会分到左分支的另一派左分支上。所以是n1-1
4对二叉搜索树进行________遍历,可以得到按关键字从小到大排列的结点序列。
中序
二叉搜索树为了搜索的方便,根节点大于左边的,小于右边的。所以中序遍历才会得到所要序列
三选择题
1已知单链表A长度为m,单链表B长度为n,若将B联接在A的末尾,其时间复杂度应为________。
A O(1) B O(m) C O(n) DO(m+n)
B。步进m次(即O(m))以达到其尾节点,然后将该节点的next指向B。如果给定了条件是链表既存有头,又存有尾,那么就是o(1)这里选B。
2设有一个递归算法如下:
int fact(int n) { //n大于等于0
if(n<=0) return 1;
else return nfact(n-1);
}
则计算fact(n)需要调用该函数的次数为________次。
A n B n+1 C n+2 Dn-1
B
可乐答的不错。可以保证。我做的结果一样。
1假设以数组S[0m-1]作为循环队列的存储结构,同时设变量front和rear分别指向队头元素的前一个位置和队尾元素位置,则队列中元素个数为 (rear-front+m)%m 。
对于普通队列,如果变量front和rear分别指向队头元素的前一个位置和队尾元素位置,则队列中元素个数为 rear-front 。
考虑到这里是循环队列,所以队列中元素个数为 (rear-front+m)%m。
2 指出下述程序段的功能是什么
(1) void Demo1(SeqStack S){
int i; arr[64] ; n=0 ;
while ( StackEmpty(S)) arr[n++]=Pop(S);
for (i=0, i< n; i++) Push(S, arr[i]);
} //Demo1
把栈S里的元素逆序。
(2) SeqStack S1, S2, tmp;
DataType x;
//假设栈tmp和S2已做过初始化
while ( ! StackEmpty (&S1))
{
x=Pop(&S1) ;
Push(&tmp,x);
}
while ( ! StackEmpty (&tmp) )
{
x=Pop( &tmp);
Push( &S1,x);
Push( &S2, x);
}
把栈S1中的元素按序(注意不是逆序)添加到栈S2中
(3) void Demo2( SeqStack S, int m)
{ // 设DataType 为int 型
SeqStack T; int i;
InitStack (&T);
while (! StackEmpty( S))
if(( i=Pop(S)) !=m) Push( &T,i);
while (! StackEmpty( &T))
{
i=Pop(&T); Push(S,i);
}
}
删除栈S中值为m的元素
(4)void Demo3( CirQueue Q)
{ // 设DataType 为int 型
int x; SeqStack S;
InitStack( &S);
while (! QueueEmpty( Q ))
{x=DeQueue( Q); Push( &S,x);}
while (! StackEmpty( &s))
{ x=Pop(&S); EnQueue( Q,x );}
}// Demo3
把Q的元素逆序。
(5) CirQueue Q1, Q2; // 设DataType 为int 型
int x, i , n= 0;
// 设Q1已有内容, Q2已初始化过
while ( ! QueueEmpty( &Q1) )
{ x=DeQueue( &Q1 ) ; EnQueue(&Q2, x); n++;}
for (i=0; i< n; i++)
{ x=DeQueue(&Q2) ;
EnQueue( &Q1, x) ; EnQueue( &Q2, x);}
把Q1的元素按序复制到Q2中
以上就是关于c语言编程 数据结构题全部的内容,包括:c语言编程 数据结构题、数据结构试题求解、数据结构的题目等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)