c语言编程 数据结构题

c语言编程 数据结构题,第1张

(⊙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语言编程 数据结构题、数据结构试题求解、数据结构的题目等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9988983.html

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

发表评论

登录后才能评论

评论列表(0条)

保存