5-順序表查詢及插入問題
給你一個順序表a[],請找到
1-0 第一個x出現的位置,如果不存在,輸出-1
1-1 前兩個x出現的位置,如果只存在一個x,輸出他的位置,如果一個都不存在,輸出-1
1-2 查詢最小/大元素所在的位置,如果多個最小/大值,輸出第一個
1-3 查詢次大/小值所在的位置。
2-0向順序表a[]的第i個(下標從0開始)位置前插入一個元素x。如果插入位置太小輸出-1,太大輸出1,合法輸出0並完成插入
程式碼1:(自己寫的):
#include <stdio.h>
const int maxn = 100;
int finds(int a[],int n,int x)
{
int couter=0;
for(int i=1;i<=n;i++)
{
if((a[i]==x))
{
return i;
}
}
return -1;
}
void finds1(int a[],int n,int x)
{
int couter=0;
for(int i=1;i<=n;i++)
{
if((a[i]==x)&&(couter<2))
{
printf("%d ",i);
couter++;
}
}
if(!couter)
printf("-1");
}
int finds2(int a[],int n)
{
int site=1;
a[0]=a[1]; //設a[0]為最大元素,每個元素跟a[0]進行比較
for(int i=2;i<=n;i++)
{
if(a[0]<a[i])
{
a[0]=a[i];
site=i;
}
}
return site;
}
//max1和max2的值需要先做一個比較,以下程式碼未比較,待改正
/*int finds3(int a[],int n)
{
int b[3];
int max1=1,max2=2;
b[1]=a[1];
for(int i=2;i<=n;i++)
{
if(a[i]>b[1])
{
b[2]=b[1];
max2=max1;
b[1]=a[i];
max1=i;
}
else if(a[i]<b[1])
{
if(a[i]>b[2])
{
b[2]=a[i];
max2=i;
}
}
}
return max2;
}
*/
int main()
{
int a[maxn];
int n,x;
scanf("%d %d",&n,&x);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
// int ret=finds(a,n,x);
// printf("%d\n",ret);
// finds1(a,n,x);
// int maxs = finds2(a,n);
// printf("%d",maxs);
printf("%d",finds3(a,n));
return 0;
}
程式碼2:(西交wrong):
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;
const int maxn = 100000;
typedef pair<int,int> P;
int findx(int a[],int n,int x)
{
for(int i=1;i<=n;i++)
if(a[i]==x) return i;
return -1;
}
void findxy(int a[],int n,int x,int &x1,int &x2)
{
bool cot=0;//當前出現了0個x
for(int i=1;i<=n;i++)
if(a[i]==x)
if(cot==0) {x1=i;cot=1;}
else
if(cot==1) {x2=i;return ;}
}
int findmax(int a[],int n)
{
int maxpos=1,maxnum=a[1];
for(int i=2;i<=n;i++)
if(a[i]>maxnum) {maxnum=a[i];maxpos=i;}
return maxpos;
}
int findmax2(int a[],int n)
{
//n
int max1=max(a[1],a[2]),max2=min(a[1],a[2]),pos1,pos2;
if(a[1]>a[2]) {pos1=1;pos2=2;}
else {pos1=2;pos2=1;}
for(int i=3;i<=n;i++)
{
if(a[i]>max1) {max2=max1;pos2=pos1;max1=a[i];pos1=i;}
else
if(a[i]==max1) continue;
else {
if(a[i]>max2){
pos2=i;
max2=a[i];
}
}
}
return pos2;
}
int insertList(int a[],int th,int n,int x)
{
if(th<1) return -1;
if(th>n) return 1;
for(int i=n;i>=th;i--)
a[i+1]=a[i];
a[th]=x;
return 0;
}
int main()
{
int a[maxn];
//1.0 第一個x出現的位置,如果不存在,輸出-1
int n,x,y;
cin>>n>>x>>y;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
//int res=findx(a,n,x);
//printf("%d\n",res);
/*
int x1=-1,x2=-1;
findxy(a,n,x,x1,x2);
if(x1==-1) printf("-1\n");
else
if(x2!=-1) printf("%d %d\n",x1,x2);
else printf("%d\n",x1);
*/
//printf("%d\n",findmax2(a,n));
cout<<insertList(a,x+1,n,y)<<endl;
for(int i=1;i<=n+1;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
(感謝西交wrong學長提供以上題目練習)
相關文章
- 順序表應用6:有序順序表查詢
- 順序查詢
- DNS查詢順序DNS
- 順序表有序插入資料
- 資料結構_順序表_順序表的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言
- 第二章-線性表-順序表(初始化、迴圈、插入、刪除、查詢、清空)
- DS靜態查詢之順序查詢
- 順序查詢和二分查詢
- 再次明確Oracle插入與讀取的順序問題Oracle
- MySQL 查詢處理 SQL查詢執行順序MySql
- #查詢演算法#【1】簡單查詢:順序、折半查詢演算法
- 【Oracle】-【插入讀取順序】-插入讀取之間的順序關係Oracle
- 向表中插入中文字元,查詢時亂碼問題字元
- MySQL 查詢中保留 IN 中的順序MySql
- MySQL之SQL邏輯查詢順序MySql
- 查詢處理的邏輯順序
- SQL查詢關鍵字執行順序及記憶口訣SQL
- 順序表
- MySQL 並列排名和順序排名查詢MySql
- MySQL 查詢常用操作(0) —— 查詢語句的執行順序MySql
- leetcode題解(查詢表問題)LeetCode
- 順序表應用5:有序順序表歸併
- SQL 查詢語句的執行順序解析SQL
- T-sql語句查詢執行順序SQL
- 【層次查詢】Hierarchical Queries之處理順序
- mysql order by 和 group by 順序問題MySql
- Java 修飾符順序問題Java 修飾符
- Git diff hash順序的問題Git
- 靜態順序表和動態順序表 對比
- 資料結構實驗一:順序表的建立與操作實現、順序表實現約瑟夫環問題資料結構
- SQL Server資料庫調整表中列的順序操作方法及遇到問題SQLServer資料庫
- SQL邏輯查詢處理順序特別提醒SQL
- Oracle 優化器與sql查詢執行順序Oracle優化SQL
- 如何找東西?查詢演算法之順序查詢和二分查詢詳解演算法
- 第2章 順序表及其順序儲存
- 【問題】 table 和column 查詢表定義
- python運算子及優先順序順序Python
- 命中率及查詢有問題sqlSQL