代码
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*Linklist;
void create_FIFO(Linklist head,int b[],int n);//尾插
void create_LIFO(Linklist head,int b[],int n);//头插
void printLinklist(Linklist head);//输出
int main()
{
Linklist head1,head2;
int b[100],m,i;
head1=(LNode *) malloc(sizeof(LNode));//动态分配存储空间
head1->next=NULL;
head2=(LNode *) malloc(sizeof(LNode));//动态分配存储空间
head2->next=NULL;
i=0;
while(scanf("%d",&m)!=EOF)
{
b[i++]=m;
}
void create_FIFO(Linklist head1,int b,int i);
printLinklist(head1);
void create_LIFO(Linklist head2,int b,int i);
printLinklist(head2);
return 0;
}
void create_FIFO(Linklist head,int b[],int n)
{
LNode *p,*q;
int i=0;
p=head;
while(i<n)
{
q=(LNode *)malloc(sizeof(LNode));
q->data=b[i];
p->next=q;
p=q;
i++;
}
p->next=NULL;
}
void create_LIFO(Linklist head,int b[],int n)
{
LNode *p;
int i=0;
while(i<n)
{
p=(LNode *)malloc(sizeof(LNode));
p->data=b[i];
p->next=head->next;
head->next=p;
i++;
}
}
void printLinklist(Linklist head)//输出链表元素
{
LNode *p;
p=head->next;
while(p!=NULL)
{
printf("%d",p->data);
p=p->next;
}
printf("\n");
}
FIFO是先进先出,队列的方式,链表头取,插入链表尾。LIFO是后进先出,栈的方式,top指向栈顶,入栈、出栈都通过top指针。
这两个void开头的语句,不是调用方法,是有问题的,所以打印不出来:
void create_FIFO(Linklist head1,int b,int i);
printLinklist(head1);
void create_LIFO(Linklist head2,int b,int i);
printLinklist(head2);
正确的应该是:
create_FIFO(&head1,b,i);
printLinklist(head1);
create_LIFO(&head2,b,i);
printLinklist(head2);
复制2
2
题解:对于像我一样的新手,方法比较简单粗暴;
我的思路是先开两个数组,一个用于存题中数据,另一个·存每个数据出现的次数;
代码如下:
#include <iostream>
using namespace std;
int main()
{
int n;
int a[20],b[20]={0};//开数组,存取数据。
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(a[i]==a[j])//每次遇到在i之后且与a[i]相等的数据次数都会被存在相应的b[i]中。
b[i]++;
}
}
int max=0;
for(int i=0;i<n;i++)
{
if(b[i]>b[max])//找出最大的b[i]
{
max=i;
}
}
cout<<a[max]<<endl;
return 0;
}