| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1147 人关注过本帖
标题:[求助]要求用指针方法处理
只看楼主 加入收藏
luciferjx
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2006-4-24
收藏
 问题点数:0 回复次数:14 
[求助]要求用指针方法处理

有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,写一函数实现以上功能,在主函数中输入n个整数和输出调整后的n个数.
谢了.

搜索更多相关主题的帖子: 指针 
2006-05-24 22:06
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

下面是个递归写法,这样可以不借助数组,当然效率有影响!
你也可以用数组,把移出去的m个先放别的数组里,最后操作


[CODE]
#include "stdio.h"

void Move_array(int *array,int n,int m)
{
int i,data;

if(m==0)
return;
data=array[n-1];
for(i=n-2;i>=0;i--)
array[i+1]=array[i]; /*应该算指针*/
array[0]=data;
Move_array(array,n,m-1);
}

int main()
{
int array[10]={1,2,3,4,5,6,7,8,9,10},i;

Move_array(array,10,5); /*一个例子*/
for(i=0;i<10;i++)
printf("%d \n",array[i]);
return 0;
}

[/CODE]


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-25 04:54
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
以下是引用feng1256在2006-5-25 4:54:00的发言:

也可以用数组,把移出去的m个先放别的数组里,最后操作

void Move_array(int*ary,int n,int m)
{ int *tmp;
if(m<=0||m>=n)return;
tmp=(int*)malloc(m*sizeof(int));
memcpy(tmp,ary+n-m,m*sizeof(int));
memcpy(ary+m,ary,(n-m)*sizeof(int));
memcpy(ary,tmp,m*sizeof(int));
}

int main()
{
int array[10]={1,2,3,4,5,6,7,8,9,10},i;

Move_array(array,10,5); /*一个例子*/
for(i=0;i<10;i++)
printf("%d \n",array[i]);
return 0;
}


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-25 07:08
lxgaaa
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2006-5-17
收藏
得分:0 

不难 啊 为什么不自己写

这样可以更加锻炼自己 有什么问题再提出来


天高任鸟飞,海阔任鱼翱
2006-05-25 09:10
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
回复:(–★–)以下是引用feng1256在2006-5-25 4:54...
以下再发一个完善一点的:

/*-------------------------------------------------------*
将某个拥有N个元素的数组进行数据移位。具体说就是将开头的
M个元素移动到该数组的尾部,第M+1~N个元素相应往前挪。
*-------------------------------------------------------*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<memory.h>
int main()
{
int N;
int M;
int *a; //a[]是一个动态的数组,用于存放原始数据
int i,*b; //b[]也是一个动态数组,用于存放过渡数据
printf("原始数据有几个?\n");scanf("%d",&N);
printf("需移动几个数据?\n");scanf("%d",&M);
a=(int*)malloc(N*sizeof(int));
//让电脑产生N个随机数:
printf("原始数据为\n");
srand(time(NULL));//随机数种子
for(i=0;i<N;i++)
{ a[i]=rand();
printf("%-6d",a[i]);
if((i+1)%10==0)printf("\n");
}
printf("\n");
if(M>0 && M<N)
{
b=(int*)malloc(M*sizeof(int));////////申请内存
memcpy(b,a,M*sizeof(int));//相当于for(i=0;i<M;i++)b[i]=a[i];
memcpy(a,a+M,(N-M)*sizeof(int));//相当于for(i=M;i<N;i++)a[i-M]=a[i];
memcpy(a+N-M,b,M*sizeof(int));//相当于for(i=0;i<M;i++)a[N-M+i]=b[i];
free(b);//////////////////////////////释放内存
}
//检验循环移位实现没有:
printf("移动位置后\n");
for(i=0;i<N;i++)
{ printf("%-6d",a[i]);
if((i+1)%10==0)printf("\n");
}
printf("\n");
}


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-25 16:42
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

链表也算指针吧?
用链表更直观哩!
#include <stdio.h>
#define N 10
typedef struct NODE
{
int num;
struct NODE *link;
}node;
int main()
{
int i=1,move;
node *head=NULL,*p=NULL,*q=NULL;
head=(node *)malloc(sizeof(node));
head->link=head;
head->num=i++;
p=head;
do
{
q=(node *)malloc(sizeof(node));/*为减少篇幅,省去内存申请检验*/
q->link=head;
q->num=i++;
p->link=q;
p=q;
}while(i<N);
p=head->link;
printf("移动之前的顺序为:\n");
printf("%d",head->num);
do
{
printf("%d",p->num);
p=p->link;
}while(p!=head);
printf("\n输入你想移动几个数:\n");
scanf("%d",&move);
i=0;
while(i<move)
{
head=head->link;
i++;
}
p=head->link;
printf("移动之后的顺序为:\n");
printf("%d",head->num);
do
{
printf("%d",p->num);
p=p->link;
}while(p!=head);
getch();
}


对不礼貌的女生收钱......
2006-05-25 19:04
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
楼上的高,对,应该这样,把链表截断,移多少多行

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-25 19:09
wto2004
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-5-20
收藏
得分:0 
我支持用链表
2006-05-25 19:11
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
#include<stdio.h>
#include<conio.h>
#define N 10
#define M 4
int a[N]={1,2,3,4,5,6,7,8,9,10};
int A(int i)
{
return a[(i+M)%N];//用它可模拟出同等效果
}
main()
{
int i;
for(i=0;i<N;i++)
printf("%d ",A(i));
getch();
}

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-25 19:50
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
原理都一样,不过还是楼上的版主您的比较绝.
代码少,看起来舒服,

对不礼貌的女生收钱......
2006-05-25 20:42
快速回复:[求助]要求用指针方法处理
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017302 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved