广工anyview数据结构第一章(2021.12)

这篇具有很好参考价值的文章主要介绍了广工anyview数据结构第一章(2021.12)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

广工anyview数据结构习题第一章,

在学习过程中部分题目参考了Giyn 、戮漠、雁过留痕等大佬的代码,在此感谢。

题目解法不是最优解,但希望能给大家有所启发。同时也发了文档资源,需要可自取。

如果对你有帮助,可以给卑微的博主留个赞、关注、收藏   (不是) 

(骗一下数据,说不定以后面试就过了,拜谢)

目录

1.DC01PE03E

2.DC01PE06

3.DC01PE08

4.DC01PE11

5.DC01PE18

6.DC01PE20

7.DC01PE21

8.DC01PE22

9.DC01PE23

10.DC01PE25E

11.DC01PE26E

12.DC01PE30

13.DC01PE49

14.DC01PE61

15.DC01PE63

16.DC01PE65


1.DC01PE03E

【例题】学习交换两个整型变量的值的方法。
注意∶本题目是例题,无需修改
/添加任何代码即可正常运行。请注意编译、运行和调试本道题目,观察执行过程中的变量变化情况。

#include "allinclude.h"  //DO NOT edit this line
int main()
{
	int a, b;

	//第1种交换a和b的值的方法
	printf("第1种交换a和b的值的方法:\n", a, b);
	a = 8;
	b = 10;
	printf("交换前:a = %d, b = %d\n", a, b);

	int c = b;
	b = a;
	a = c;
	printf("交换后:a = %d, b = %d\n\n", a, b);

	//第2种交换a和b的值的方法
	printf("第2种交换a和b的值的方法:\n", a, b);
	a = 8;
	b = 10;
	printf("交换前:a = %d, b = %d\n", a, b);

	a = a + b;
	b = a - b;
	a = a - b;
	printf("交换后:a = %d, b = %d\n\n", a, b);

	//第3种交换a和b的值的方法
	printf("第3种交换a和b的值的方法:\n", a, b);
	a = 8;
	b = 10;
	printf("交换前:a = %d, b = %d\n", a, b);

	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("交换后:a = %d, b = %d\n", a, b);
	//试一试:在第3种交换方法中,令a和b的值相等,例如都为8,会出现什么现象?

	return 0;
}

2.DC01PE06

试写一算法,如果三个整数a,b和c的值不是依次非递增的,则通过交换,令其为非递增。要求实现下列函数∶
void Descend(int &a,int &b,int &c);

/* 通过交换,令a>=b>= c*/

#include "allinclude.h"  //DO NOT edit this line
void Descend(int &a, int &b, int &c)  // 通过交换,令 a >= b >= c
{   // Add your code here

int d;
if(a<b)
{
  d=a,a=b,b=d;
}

if(b<c)
{ if (a<c)
    {  
      d=a,a=c,c=b,b=d;
    }  
  else d=b,b=c,c=d;
  
}


}

3.DC01PE08

试编写算法,求一元多项式
P(x)= a0 + a1x + a2x^2 +...+ anx^n
的值P(x0),并确定算法中每一语句的执行次数和整个算法的时间复杂度。
要求实现下列函数∶
float Polynomial(int n,int a[],float x0);

/*求一元多项式的值P(x0)。*/
/* 数组a的元素a【i】为i次项的系数,i=0,1,...,n*/

#include "allinclude.h"  //DO NOT edit this line
float Polynomial(int n, int a[], float x0) 
{   // Add your code here
  float result=0;
  int i=0;
  float x1=1;
for(;i<=n;i++)
  { 
    result+=a[i]*x1;
    x1*=x0;
  }

return result;
}

4.DC01PE11

已知k阶裴波那契序列的定义为
f(0)=0,f(1)=0,...,f(k-2)=0,f(k-1)=1;

f(n)=f(n-1)+f(n-2)+...+f(n-k),n=k,k+1,...
试编写求k阶裴波那契序列的第m项值的函数算法,k和m均以值调用的形式在函数参数表中出现。
要求实现下列函数∶
Status Fibonacci(int k,int m,int &f);
/* 如果能求得k阶斐波那刻序列的第m.项的值f,则返回0K;*/

/* 否则(比如,参数k和m 不合理)返回ERROR*/

#include "allinclude.h"  //DO NOT edit this line
Status Fibonacci(int k, int m, int &f) { 
    // Add your code here

    if (m < 0 || k < 2)
        return ERROR;

    if (m < k - 1)
    {
        f = 0;
        return OK;
    }
    if (m == k - 1 || m == k)
    {
        f = 1;
        return OK;
    }
    //m>k
    
        int arr[m+1] , i, j;
     
        for (i = 0; i <= m;)
            arr[i++] = 0;       //初始化  f(0)——f(m)都是0
        i = k-1;
        arr[i++] = 1;          //执行后i==k

        for (int sum; i <= m; i++)
        {
            for (sum=0,j = i - k; j <=i; j++)
                sum += arr[j];
            arr[i] = sum;
        }

       
       f = arr[m];      
        
        return OK;


    }

5.DC01PE18

【题目】试编写算法,计算i!x2^i的值并存入数组a【0..n-1】的第i-1个分量中(i=1,2,,n)。假设计算机中允许的整数最大值为MAXINT,则当对某个k (1≤k≤n),使k!x2^k>MAXINT时,应按出错处理。注意选择你认为较好的出错处理方法。
要求实现下列函数∶
Status Series(int a[ ],int n);
/* 求i!*2^i序列的值并依次存入长度为n的数组a;

若所有 值均不超过MAXINT,则返回OK,否则返回EOVERFLOW*/

#include "allinclude.h"  //DO NOT edit this line
Status Series(int a[], int n) { 
    // Add your code here
  if(n<1)
    return ERROR;
 int i,j = 1,k=1;
    for (i = 1;i<=n;i++)
    {
        j *= i;
        k *=2;
        
     
       if(j*k>MAXINT)
            return EOVERFLOW;
        a[i-1] =  j*k;
    }
    return OK;  

}

6.DC01PE20

已知某表示"学生"的结构体定义如下,编写算法,按照以下要求打印一个"学生"结构体数组student中所有学生的姓名。每打印一个姓名,则换行。要求∶index[ ]中每个元素的值在0~n-1之间,对应于student数组中各元素的下标。请依次按照index[ ]中每个元素指示的学生顺序打印学生姓名。例如∶student数组有3个学生∶Alex Jack Mei
index[ ]= { 1,2,0 }则打印结果为∶
Jack

Mei

Alex
注∶请勿打印除姓名外的其它字符,否则可能会导致错误。
typedef struct student{
int number;//学号
char name[4];//姓名

float score; //成绩

} stuType,* stuPtrType;
void printName(stuType student[ ],int index[ ],int n)

#include "allinclude.h"
void printName(stuType student[], int index[], int n)
{  // Add your code here
  //int length = (sizeof(student)/sizeof(stuType));
 //printf("%d",length);
   for(int i=0;i<n;i++)
{ 
  if (index[i]<n)
    for(int j=0;j<4;j++)
       printf("%c",student[index[i]].name[j]);
       
  printf("\n");
  
}

}

7.DC01PE21

已知某表示"学生"的结构体定义如下,编写算法,查找一个"学生"结构体数组中的最高成绩。
typedef struct student {
int number;//学号
char name【4】;// 姓名

float score; //成绩

} stuType,* stuPtrType;
float highestScore(stuType *student[ ],int n)

/*返回最高成绩 */

#include "allinclude.h"
float highestScore(stuType *student[], int n)
/* 返回最高成绩  */
{  // Add your code here
    float max_score=student[0]->score;
    int i;
    for( i=1;i<n;i++)
      if(student[i]->score>max_score)
        {
          max_score=student[i]->score;
        }

    return max_score;
        
}

8.DC01PE22

已知某表示"学生"的结构体定义如下,编写算法,打印"学生"结构体数组中第一个最高成绩学生的姓名和成绩。注意∶(1)打印姓名后,要换行。
(2)打印成绩后,要换行。
(3)只能使用printf函数进行打印,其中成绩只打印到小数点后2位,示例如下∶

Alex

99.99
(4)请勿打印除姓名外的其它字符,否则可能会导致错误。
typedef struct student {
int number;//学号
char name[5]; // 姓名,最后一位是'\0',无需打印

float score;//成绩
} stuType,* stuPtrType;

// 实现以下函数∶
void printFirstName_HighestScore(stuType *student[ ],int n);

#include "allinclude.h"
void printFirstName_HighestScore(stuType *student[], int n)
{  // Add your code here
    float max_score=student[0]->score;
    char max_name[4];
    int i,temp=0;
    for( i=1;i<n;i++)
    {
      if(student[i]->score > max_score)
        {
          max_score=student[i]->score;
         temp=i;
        }
    }
      strcpy(max_name,student[temp]->name);
    
    //打印
     for(i=0;i<4;i++)
        printf("%c",max_name[i]);
       
        printf("\n%.2f\n",max_score);
  }

9.DC01PE23

同8.

#include "allinclude.h"
void printLastName_HighestScore(stuType *student[], int n)
{  // Add your code here

    
    float max_score=student[0]->score;
    char max_name[4];
    
    int i,temp=0;
    for( i=1;i<n;i++)
    {
      if(student[i]->score>=max_score)
        {
          max_score=student[i]->score;
         temp=i;
        }
      
    }
      strcpy(max_name,student[temp]->name);
    
    //打印
     for(i=0;i<4;i++)
        printf("%c",max_name[i]);
       
        printf("\n%.2f\n",max_score);

}

10.DC01PE25E

【例题】学习函数指针的定义与使用。
注意∶本题目是例题,无需修改添加任何代码即可正常运行。请注意编译、运行和调试本道题目,观察执行过程中的函数调用顺序。
【程序】void A(){
printf("X\n");

}
void B(){
printf("Y\n");

}

int main()

{
void(*funcp)();//定义函数指针

funcp = A;
(*funcp)();// 实际上调用了A();

funcp = B;
(*funcp)();//实际上调用了B();

return 0;

}

#include "allinclude.h"  //DO NOT edit this line
void A() {
	printf("X\n");
}
void B() {
	printf("Y\n");
}


int main()
{
	void (*funcp)(); //定义函数指针

	funcp = A;
	(*funcp)(); // 实际上调用了A( );

	funcp = B;
	(*funcp)(); // 实际上调用了B( );

	return 0;
}

11.DC01PE26E

【例题】函数指针作为函数的参数。
注意∶本题目是例题,无需修改添加任何代码即可正常运行。请注意编译、运行和调试本道题目,观察执行过程中的函数调用顺序。

【程序】void hello()

{
printf("Hello wiorld!\n");

}
void runFun(void(*pFun)( ) )

{
pFun(); //函数指针

}
int main()

{
runFun(hello);

return 0;

}

#include "allinclude.h"  //DO NOT edit this line
void hello() 
{ 
	printf("Hello world!\n"); 
}

void runFun(void (*pFun)()) 
{
	pFun();  //函数指针;
}


int main()
{
	runFun(hello);  //hello是实际要调用的函数

	return 0;
}

12.DC01PE30

编写程序,将结构体中的字符串逆序放置。已知一个字符串结构体定义如下∶

typedef struct {
ElemType* elem; //存放一个字符串

int length; //字符串的长度

} StrSequence;
StrSequence* reverseStr(StrSequence* strSeq);
/*返回一个结构体,该结构体将strSeq中的字符串逆序存放*/
注意∶请勿修改strSeq中的任何值。

#include "allinclude.h"
StrSequence* reverseStr(StrSequence* strSeq)
/*返回一个结构体,该结构体将strSeq中的字符串逆序存放*/
{  // Add your code here
  int i=0,length;
  char temp;
for(;strSeq->elem[i++]!=0;)
        ;
    
    length=--i;
    
for(i=0;i<=length/2;i++ )
  if(strSeq->elem[i]!=strSeq->elem[length-i-1])
    {
      temp=strSeq->elem[i];
    strSeq->elem[i]=strSeq->elem[length-i-1];
    strSeq->elem[length-i-1]=temp;

    }
    
    return strSeq;
}

13.DC01PE49

【题目】试写一算法,由长度为n的一维数组a构建一个序列s。
要求实现下列函数∶
Status CreateSequence(Sequence &S,int n,ElemType *a);

/*由长度为n的一维数组a构建一个序列S,并返回OK。*/

/* 若构建失败,则返回ERROR*/
序列的结构体定义为∶

typedef struct {
ElemType*elem;

int length;

}Sequence;

#include "allinclude.h"  //DO NOT edit this line
Status CreateSequence(Sequence &S, int n, ElemType *a) { 
   // Add your code here
if(n<1)  return ERROR;

S.elem= (ElemType*)malloc(n*sizeof(ElemType));

for(int i=0;i<n;i++)
  {
  S.elem[i]=a[i];  
    
  }
  S.length =n;
  
  return OK;
}

14.DC01PE61

【题目】链表的结点和指针类型定义如下
typedef struct LNode {
ElemType data;

struct LNode *next;

} LNode,*LinkList;
试写一函数,构建一个值为x的结点。
要求实现下列函数∶
LinkList MakeNode(ElemType x);
/* 构建一个值为x的结点,并返回其指针。 */

/* 若构建失败,则返回NULL。*/
 

#include "allinclude.h"  //DO NOT edit this line
LinkList MakeNode(ElemType x) { 
    // Add your code here
LNode *p;
    p = (LNode*)malloc(sizeof(LNode));
    if(NULL != p)
        
    p->data = x;
    p->next = NULL;
    return p;

}

15.DC01PE63

【题目】链表的结点和指针类型定义如下
typedef struct LNode {
ElemType data;

struct LNode *next;

} LNode,*LinkList;
试写一函数,构建长度为2且两个结点的值依次为x和y的链表。
要求实现下列函数∶
LinkList CreateLinkList(ElemType x,ElemType y);

/* 构建其两个结点的值依次为x和y的链表。*/

/* 若构建失败,则返回NULL。*/

#include "allinclude.h"  //DO NOT edit this line
LinkList CreateLinkList(ElemType x, ElemType y) { 
    // Add your code here
LinkList head= (LinkList)malloc (sizeof (LNode));
if(head)
{
  head->data=x;
  head->next= (LinkList)malloc (sizeof (LNode));
      if(head->next)
       { head->next->data=y;
        head->next->next=NULL;
       }
       
       else return NULL;
}

   return head; // This is a temporary code. Change it if necessary.
}

16.DC01PE65

【题目】链表的结点和指针类型定义如下
typedef struct LNode {
ElemType data;

struct LNode *next;

} LNode,*LinkList;
试写一函数,构建长度为2的升序链表,两个结点的值分别为x和y,但应小的在
前,大的在后。要求实现下列函数∶
LinkList CreateOrdLList(ElemType x,ElemType y);

/* 构建长度为2的升序链表。*/

/*若构建失败,刚返回NULL。*/文章来源地址https://www.toymoban.com/news/detail-730979.html

#include "allinclude.h"  //DO NOT edit this line
LinkList CreateOrdLList(ElemType x, ElemType y) { 
    // Add your code here

LinkList head= (LinkList)malloc (sizeof (LNode));
if(head)
{
      head->next= (LinkList)malloc (sizeof (LNode));
      if(head->next)
       { 
        head->next->next=NULL;
       }
       
       else return NULL;
}

if(x<y)
head->data=x,head->next->data=y;
else 
head->data=y,head->next->data=x;


   return head; // This is a temporary code. Change it if necessary.

}

到了这里,关于广工anyview数据结构第一章(2021.12)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法竞赛:初级算法(第一章:基础数据结构)

    动态链表 动态链表需要 临时分配链表节点 ,使用完毕后释放。 优点 :能及时释放空间,不使用多余内存 缺点 :需要管理空间,容易出错(竞赛一般不用动态链表) 静态链表 静态链表使用 预先分配的一段连续空间 存储链表,这种链表在逻辑上是成立的。 有两种做法:

    2024年01月19日
    浏览(45)
  • 数据结构英文习题解析-第一章 算法复杂度分析Algorithm Analysis

    前言:最近快到FDS考试了,po重刷了一下学校的题目,自己整理了一些解析orz 因为po在自己找解析和学习的过程中非常痛苦,所以在此共享一下我的题目和自己写的解题思路,欢迎各位指出错误~全章节预计会陆续更新,可在专栏查看~ HW1 1. The major task of algorithm analysis is to an

    2024年03月12日
    浏览(69)
  • 【LeetCode】《LeetCode 101》第十一章:妙用数据结构

    C++ 提供的数据结构包括: Sequence Containers:维持顺序的容器。 vector: 动态数组 ,用于 O(1) 的随机读取。因为大部分算法的时间复杂度都会大于 O(n) ,因此我们经常新建 vector 来存储各种数据或中间变量。 list: 双向链表 ,也可以当作 stack 和 queue 来使用。由于 LeetCode 的题目

    2024年02月13日
    浏览(140)
  • 数据结构(初阶)第一节:数据结构概论

    本篇文章是对数据结构概念的 纯理论 介绍,希望系统了解数据结构概念的友友可以看看,对概念要求不高的友友稍做了解后移步下一节: 数据结构(初阶)第二节:顺序表-CSDN博客 目录 正文 1.数据结构的相关概念 1.1什么是数据 1.2什么是数据结构 1.3为什么需要数据结构 1

    2024年04月10日
    浏览(70)
  • 数据结构入门篇:第一篇

    🤔首先,为什么要学数据结构? 数据结构的 概念 :在内存中对数据进行管理; 数据结构的学习能让我们在处理大量数据时提高处理效率,即让我们在不同的场景下更快的处理大量数据; 🤔算法和数据结构有什么关系? 算法 就是处理数据的一种方法; 数据结构是为算法服

    2023年04月18日
    浏览(53)
  • 【从零开始学习数据结构 | 第一篇】树

    目录 前言:  树: 树结点之间的关系描述:  树的常见属性: 森林: ​编辑树的性质: 总结: 当谈论数据结构时,树(Tree)是一种极为重要且常用的数据结构之一。树的概念源自现实生活中的树木,它具有分层结构,由 节点(Node) 和 边(Edge) 组成,形成了一种类似于

    2024年04月16日
    浏览(49)
  • [数据结构 -- 手撕排序第一篇] 插入排序

    目录 1、常见的排序算法 2、插入排序的思路 2.1 基本思想 2.2 直接插入排序 2.2.1 单趟排序的思路 2.2.2 单趟排序代码实现 3、插入排序代码 4、插入排序+打印测试 5、插入排序的时间复杂度 5.1 最坏情况 5.2 最好情况 6、直接插入排序的特性总结   直接插入排序是一种简单的插入

    2024年02月12日
    浏览(53)
  • 深入理解数据结构第一弹——二叉树(1)——堆

    前言: 在前面我们已经学习了数据结构的基础操作:顺序表和链表及其相关内容,今天我们来学一点有些难度的知识—— 数据结构中的二叉树 ,今天我们先来学习 二叉树中堆 的知识,这部分内容还是非常有意思的,下面我们就开始慢慢学习 准备工作:本人习惯将文件放在

    2024年04月17日
    浏览(41)
  • 【夜深人静学数据结构与算法 | 第一篇】KMP算法

    目录  前言:  KMP算法简介: 引入概念: 前缀后缀 前缀表: 简单例子: 暴力遍历: KMP算法:​  KMP算法难点: 总结: 本篇我们将详细的从理论层面介绍一下什么是KMP算法,相对应的力扣刷题专栏里也会有相对应的习题,欢迎各位前往阅读。           KMP算法是一种字符

    2024年02月08日
    浏览(67)
  • 浙大数据结构第一周01-复杂度3 二分查找

    本题要求实现二分查找算法。 函数接口定义: 其中 List 结构定义如下: L 是用户传入的一个线性表,其中 ElementType 元素可以通过、==、进行比较,并且题目保证传入的数据是递增有序的。函数 BinarySearch 要查找 X 在 Data 中的位置,即数组下标(注意:元素从下标1开始存储)

    2024年02月12日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包