/*
*程序的版权和版本声明部分:
*Copyright(c)2014,烟台大学计算机学院学生
*All rights reserved.
*文件名称:
*作者:田成琳
*完成日期:2014 年 3月 18 日
*版本号:v1.0
*对任务及求解方法的描述部分:
*输入描述: Sample Input
7
1 2 3 4 5 6 6
4
*问题描述:(线性表)设有一个正整数序列组成的有序单链表(按递增次序有序,且允许有相等的整数存在),
试编写能实现下列功能的算法 :(要求用最少的时间和最小的空间)
(1)确定在序列中比正整数x大的数有几个(相同的数只计算一次);
(2) 在单链表将比正整数x小的数按递减次序排列;
*程序输出: Sample Output
2
3 2 1
*问题分析:
*算法设计:
*/
#include<iostream>
using namespace std;
struct Node
{
int data;
struct Node *next;
};
Node *head=NULL;
int num;
void makelist();
void outlist(int);
int search(int);
int main()
{
int x,s;
makelist();
cin>>x;
s=search(x);
cout<<s<<endl;
outlist(s);
return 0;
}
void makelist()
{
int n;
Node *p;
cin>>num;
for(int j=0;j<num;j++)
{
cin>>n;
p=new Node;
p->data=n;
p->next=head;
head=p;
}
}
void outlist(int x)
{
Node *p=head;
int i;
for(i=0;i<num-x-1;i++)
{
p=p->next;
}
for(int j=num-x-1;j<num;j++)
{
cout<<p->data<<" ";
p=p->next;
}
}
int search(int x)
{
Node *p=head;
int n=0;
while(p->next!=NULL)
{
p=p->next;
if(p->data>x)
{
n++;
}
}
return n;
}
运行结果:
心得体会:各种不熟练,还是不太明白链表运行机制,虽然题做出来了,但参考的老师的模板,自己不懂每一步是为了什么。