您的位置:首页 > 其它

数组循环删除

2017-07-21 22:50 148 查看
转自:http://blog.csdn.net/laibinghua/article/details/5905670

有一个数组a[1000]存放0--1000;要求每隔二个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。 
以7个数为例: 

{0,1,2,3,4,5,6,7} 0-->1-->2(删除)-->3-->4-->5(删除)-->6-->7-->0(删除),如此循环直到最后一个数被删除。 
方法1:数组 

#include <iostream> 

using namespace std; 

#define null 1000 

int main() 



int arr[1000]; 

for (int i=0;i<1000;++i) 

arr[i]=i; 

int j=0; 

int count=0; 

while(count<999) 



while(arr[j%1000]==null) 

j=(++j)%1000; 

j=(++j)%1000; 

while(arr[j%1000]==null) 

j=(++j)%1000; 

j=(++j)%1000; 

while(arr[j%1000]==null) 

j=(++j)%1000; 

arr[j]=null; 

++count; 



while(arr[j]==null) 

j=(++j)%1000; 

cout<<j<<endl; 

return 0; 

}方法2:链表 

#include<iostream> 

using namespace std; 

#define null 0 

struct node 



int data; 

node* next; 

}; 

int main() 



node* head=new node; 

head->data=0; 

head->next=null; 

node* p=head; 

for(int i=1;i<1000;i++) 



node* tmp=new node; 

tmp->data=i; 

tmp->next=null; 

head->next=tmp; 

head=head->next; 



head->next=p; 

while(p!=p->next) 



p->next->next=p->next->next->next; 

p=p->next->next; 



cout<<p->data; 

return 0; 


方法3:通用算法 

#include <stdio.h> 

#define MAXLINE 1000 //元素个数 

/* 

MAXLINE 元素个数 

a[] 元素数组 

R[] 指针场 

suffix 下标 

index 返回最后的下标序号 

values 返回最后的下标对应的值 

start 从第几个开始 

K 间隔 

*/ 

int find_n(int a[],int R[],int K,int& index,int& values,int s=0) { 

int suffix; 

int front_node,current_node; 

suffix=0; 

if(s==0) { 

current_node=0; 

front_node=MAXLINE-1; 



else { 

current_node=s; 

front_node=s-1; 



while(R[front_node]!=front_node) { 

printf("%d/n",a[current_node]); 

R[front_node]=R[current_node]; 

if(K==1) { 

current_node=R[front_node]; 

continue; 



for(int i=0;i<K;i++){ 

front_node=R[front_node]; 



current_node=R[front_node]; 



index=front_node; 

values=a[front_node]; 

return 0; 



int main(void) { 

int a[MAXLINE],R[MAXLINE],suffix,index,values,start,i,K; 

suffix=index=values=start=0; 

K=2; 

for(i=0;i<MAXLINE;i++) { 

a[i]=i; 

R[i]=i+1; 



R[i-1]=0; 

find_n(a,R,K,index,values,2); 

printf("the value is %d,%d/n",index,values); 

return 0; 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐