数据结构03

0301

一个学生由id和姓名描述。
创建一个学生结构体,并显示学生信息
输入要求:
一个大于0的整数和一个字符串,分别表示一个学生的id和姓名
输出要求:
输出学生的id和姓名(空格分隔),并换行。
数据示例1:
输入:
111 abc
输出:
111 abc
思路提示:
create函数参考算法:
1 动态开辟内存空间,存储一个stud结构体变量

2 将用户输入的id和姓名分别存入结构体对应的成员中

3 返回指向这个结构体的指针
#include <stdio.h>
#include <string.h>
#define MAXN 80  // 最大学生姓名长度 

struct stud{
	int id;
	char name[MAXN];
};
// 创建并返回一个学生结构体 
stud* create();

// 输出学生id和姓名(空格分隔),并换行 
void output(stud* s);
int main(){
	stud *s = create();
	output(s);
	return 0;
} 
stud* create()
{
	stud *p= new stud;
	scanf("%d %s", &p->id,p->name);
	return p;
}

void output(stud* s)
{
	printf("%d %s\n",s->id,s->name);
}

0302

学生可以用id和姓名来描述。
根据用户输入,创建一个结构体数组,并根据用户输入的id打印出这名学生的信息。
输入要求:
第一行输入一个整数n和m,分别表示输入学生的个数和输入的id个数。
接下来输入n行,每行输入一个大于0的整数和一个字符串,分别表示一个学生的id和姓名。
接下来输入m行,每行输入一个整数,代表一个学生id
输出要求:
根据输入的学生id,输出m组数据。
如果输入学生的id为0,则输出所有学生的信息
否则,根据id输出学生信息(如果输入的id不存在,则输出“no such a student\n”,
否则输出学生的id和姓名,格式详见outputall函数)
数据示例1:
输入:
5 4
111 aaa
222 bbb
333 ccc
444 ddd
555 eee
111
555
0
666
输出:
111 aaa
555 eee
111 aaa
222 bbb
333 ccc
444 ddd
555 eee
no such a student
#include<stdio.h>
#include<stdlib.h>
#define MAXN 80
struct student{
	int id;
	char name[MAXN];
};

// 使用动态分配函数,创建一个长度为n的学生结构体数组
// 根据用户的输入为这n个学生赋值,并返回第一个元素地址  
struct student* create(int n);

// 根据id输出学生信息 
void output(struct student *stds, int n, int id);

// 输出所有学生信息 
void outputall(struct student *stds, int n){
	for(int i=0; i<n; i++){
		printf("%d %s\n", stds[i].id, stds[i].name);
	}
}

int main(){
	int n, m;
	scanf("%d %d", &n, &m);
	struct student *p = create(n);
	while(m--){
		int id;
		scanf("%d", &id);
		if(id==0) outputall(p, n);
		else output(p, n, id);	
	}
}

// 使用动态分配函数,创建一个长度为n的学生结构体数组
// 根据用户的输入为这n个学生赋值,并返回第一个元素地址  
struct student* create(int n)
{
	student *p = new student[n];
		for(int i=0;i<n;i++)
		scanf("%d %s", &p[i].id,p[i].name);
	return p;
}
// 根据id输出学生信息 
void output(struct student *stds, int n, int id)
{
	for(int i=0;i<n;i++)
	{
		if(id==stds[i].id)
		{
			printf("%d %s\n",stds[i].id,stds[i].name);
			return;
		}
	}
	printf("no such a student\n");
		
}

0303

请实现关于复数相加和复数相减的函数。
复数由实部和虚部组成,其类型定义如下:
struct complex{
int r,i; //r为实部,i为虚部
};
函数接口定义:
complex* add(complex *a,complex *b);
函数传入的两个参数a和b均为指向complex的指针,返回指向相加结果的指针(complex)
complex* minus(complex *a,complex *b);
函数传入的两个参数a和b均为指向complex的指针,返回指向相加结果的指针(complex)
void printComplex(complex *a); 
函数传入的参数a为需要打印的复数,复数输出格式为"a+bi" 或 "a-bi" (其中b ≥ 0)
输入要求:
多组数据
每组数据只占一行,包含4个整数ar,ai,br,bi以及一个字符c。
其中ar为复数a的实部,ai为复数a的虚部,br为复数b的实部,bi为复数b的虚部。字符c表示需要运算的操作符。
输出要求:
对于每组数据输出对应的复数结果,输出格式为"a+bi" 或 "a-bi" (其中b ≥ 0),需要换行
无论b是否为0,均需输出a
数据示例1:
输入:
1 1 1 1 +
1 1 1 1 -
1 1 2 2 -
输出:
2+2i
0
-1-1i
思路提示:
在函数add和minus内动态开辟内存空间,存储复数相加或相减的结果(数据类型为complex),并返回指向这个complex的指针
#include <stdio.h>

struct complex{
	int r,i;	//r为实部,i为虚部 
};
	 
complex* add(complex *a,complex *b); //复数加法 
complex* minus(complex *a,complex *b); //复数减法  
void printComplex(complex *a); //输出 

int main(){
	complex a,b,*re;
	char c;
	while(~scanf("%d %d %d %d %c",&a.r,&a.i,&b.r,&b.i,&c)){
		switch(c){
		case '+':
			re = add(&a,&b);
			break;
		case '-':
			re = minus(&a,&b);
			break;
		}
		printComplex(re);
		delete re;
	}
}

complex* add(complex *a,complex *b)//复数加法 
{
	complex *p=new complex; 
	p->r=a->r+b->r;
	p->i=a->i+b->i;
	return p;
}
complex* minus(complex *a,complex *b) //复数减法  
{
	complex *t=new complex;
	t->r=a->r - b->r;
	t->i=a->i - b->i;
	return t;
}
void printComplex(complex *a)//输出
{
	if(a->i==0)
	printf("%d\n",a->r);
	else if(a->i>0)
	printf("%d+%di\n",a->r,a->i);
	else if(a->i<0)
	printf("%d%di\n",a->r,a->i);
}

0304

根据输入的数据顺序,创建一个整数链表
输入要求:
多组输入。
每组首先输入一个整数n,表示整数链表结点个数。接着输入n个整数。
当n=0时,程序结束。
输出要求:
打印每个链表元素的值,并换行。每个整数后面一个空格。
数据示例1:
输入:
3
1 2 3
5
2 6 9 11 24
0
输出:
1 2 3
2 6 9 11 24
#include<stdio.h>
#include<stdlib.h>

struct node{
	int data;
	struct node *next;
};

// 创建n个整数结点的链表(无头结点) 
node* create(int n); 

void output(node *p){ // 打印链表 
	while(p){
		printf("%d ", p->data);
		p = p->next;
	} 
	printf("\n");
} 

int main(){
	int n;
	while(~scanf("%d", &n) && n){
		struct node *p = create(n);
		output(p);
	}
	return 0;
}
///
node* create(int n)
{
	node *L=new node;
	scanf("%d",&L->data);
	node *q=L;
	for(int j=1;j<n;j++)
	{
		q->next=new node;
		q=q->next;
		scanf("%d",&q->data);
		
	}
	q->next=NULL;
	return L;
}

おすすめ

転載: blog.csdn.net/unhere123/article/details/115983669