广工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。*/

#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.

}

  • 44
    点赞
  • 158
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凛_Lin~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值