目录
题目
思路
代码
数据结构
STL
仿STL
题目
建立长度为n的顺序表,在表中找出最大值和最小值元素所在的位
输入
第一行为顺序表的长度n;第二行为顺序表中的数据元素;输出
第一行为最大值的位置;第二行为最小值的位置。 本题输出格式:第一行输出需换行,第二行输出无需换行。
样例输入
7 1 2 3 4 5 6 7样例输出
Lmax=6 Lmin=0
思路
本题可以像普通数组那样,从头遍历,找到最大值最小值,并记录位置。
代码
数据结构
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
//定义顺序表
typedef struct{int item[10005],len;
}Seqlist;
//初始化顺序表
void SeqlistInit(Seqlist* &L){L=(Seqlist*)malloc(sizeof(Seqlist));L->len=0;
}
//创建顺序表
void SeqlistCreate(Seqlist* &L){int n,x;cin>>n;while(n--){cin>>x;L->item[L->len++]=x;}
}
//查找数据
void SeqlistFind(Seqlist* &L){int x,maxn=-1,minn=100005,Lmax,Lmin;for(int i=0;i<L->len;i++){if(L->item[i]>maxn){maxn=L->item[i];Lmax=i;}if(L->item[i]<minn){minn=L->item[i];Lmin=i;}}cout<<"Lmax="<<Lmax<<endl<<"Lmin="<<Lmin;
}
int main(){Seqlist *L;SeqlistInit(L);SeqlistCreate(L);SeqlistFind(L); return 0;
}
STL
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {vector<int>a;int n,x;cin>>n;while(n--) {cin>>x;a.push_back(x);}vector<int>::iterator it;int minn=100000,maxn=-1,i=0,Lmax,Lmin;for(it=a.begin();it!=a.end();it++,i++){if(*it>maxn) {maxn=*it;Lmax=i;}if(*it<minn) {minn=*it;Lmin=i;}}cout<<"Lmax="<<Lmax<<endl<<"Lmin="<<Lmin;return 0;
}
仿STL
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
typedef struct {int data[10005];int len;
}Seqlist;
//初始化顺序表
void SeqlistInit(Seqlist* &L) {L=(Seqlist*)malloc(sizeof(Seqlist));L->len=0;
}
//正向迭代器
int* begin(Seqlist* &L) {int *p=&L->data[0];return p;
}
int* end(Seqlist* &L) {int *p=&L->data[L->len];return p;
}
//尾增
void push_back(Seqlist* &L,int key) {L->data[L->len++]=key;
}
int main() {Seqlist *L;SeqlistInit(L);int n,x;cin>>n;while(cin>>x,push_back(L,x),--n);int minn=100000,maxn=-1,i=0,Lmax,Lmin;int* it;for(it=begin(L);it!=end(L);it++,i++){if(*it>maxn) {maxn=*it;Lmax=i;}if(*it<minn) {minn=*it;Lmin=i;}}cout<<"Lmax="<<Lmax<<endl<<"Lmin="<<Lmin;system("pause");return 0;
}