数组循环删除

 2023-09-18 阅读 18 评论 0

摘要:转自:http://blog.csdn.net/laibinghua/article/details/5905670 有一个数组a[1000]存放0--1000;要求每隔二个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。 以7个数为例: {0,1,2,3,4,5,6,7} 0-->1-->2&#

转自: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 
从第几个开始 
间隔 
*/ 
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; 

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/75668.html

上一篇:pthread_exit()
下一篇:c++string

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息