在抗击疫情的过程中,A市某组织的负责人收到了大量的物资,包括口罩、防护服、手术手套等。由于人手不足,搬运工只是把一箱箱的材料放在一个长长的架子上一箱一箱地搬过来。图1显示了这种情况。现在是先生。俞敏洪应该重新安排箱子,以便进一步分发。把同一种材料的盒子放在一起。图2显示了结果情况。尝试设计一个非递归算法/程序(时间复杂度<=O(n))来帮助余先生移动箱子。(2) 试着写一些线性结构的实际应用程序。提示:G表示手术手套。M表示面罩。C表示防护服。
输入:G M G G G G C M M
输出:M M M…G G G…C C C C
解决方案(源码):
#include<stdio.h>
#include<malloc.h>
#define maxsize 100
typedef struct LNode{
char data;
struct LNode* next;
}LNode;
int main()
{
char datas[maxsize];
int i = 0;
LNode *head,*en,*G,*M,*C,*Gt,*Mt,*Ct;
gets(datas);
head = (LNode*)malloc(sizeof(LNode));
G = (LNode*)malloc(sizeof(LNode));
M = (LNode*)malloc(sizeof(LNode));
C = (LNode*)malloc(sizeof(LNode));
Gt = G;
Mt = M;
Ct = C;
for(;datas[i]!='\0';i++){
if(datas[i]!=' '){
LNode* temp = (LNode*)malloc(sizeof(LNode));
temp->data = datas[i];
if(datas[i]=='M')
{
Mt->next = temp;
Mt=Mt->next;
}
if(datas[i]=='G')
{
Gt->next = temp;
Gt=Gt->next;
}
if(datas[i]=='C')
{
Ct->next = temp;
Ct=Ct->next;
}
}
}
head->next = M->next;
Mt->next = G->next;
Gt->next = C->next;
Ct->next = NULL;
for(head = head->next;head!=NULL;head=head->next){
printf("%c",head->data);
}
}