C语言:数列的移动给定一个长度为N的连续数列,给M次操作,每次操作给定一个数K,要求把当前数列中的第K个数移动到数列最前面,用链表实现,输出M次操作后的数列.#include#include#define LEN sizeof(st
来源:学生作业帮助网 编辑:六六作业网 时间:2025/01/23 20:23:05
C语言:数列的移动给定一个长度为N的连续数列,给M次操作,每次操作给定一个数K,要求把当前数列中的第K个数移动到数列最前面,用链表实现,输出M次操作后的数列.#include#include#define LEN sizeof(st
C语言:数列的移动
给定一个长度为N的连续数列,给M次操作,每次操作给定一个数K,要求把当前数列中的第K个数移动到数列最前面,用链表实现,输出M次操作后的数列.
#include
#include
#define LEN sizeof(struct Hn)
struct Hn
{
int num;
struct Hn *next;
};
struct Hn* creat(int n)
{
struct Hn * head,*p,*q;
head=NULL;
p= (struct Hn *)malloc(LEN);
scanf("%d",&p->num);
head=p;
q=p;
while(n-1)
{
p= (struct Hn *)malloc(LEN);
scanf("%d",&p->num);
q -> next = p;
q=p;
--n;
}
q->next =NULL;
return head;
}
struct Hn *move(struct Hn *head,int a)
{
int j;
struct Hn *p,*k;
p=head;
if(head!=NULL)
{
for(j=1;jnext;
k=p->next;
p->next=k->next;
k->next=head;
head=k;
}
return head;
}
int main()
{
int M,i,a,N;
struct Hn *head,*q;
scanf("%d",&N);
head=creat(N);
scanf("%d",&M);
for(i=0;inum);
q=q->next;
}while(q!=NULL);
printf("\n");
return 0;
}
这个程序有些答案是不可以的
C语言:数列的移动给定一个长度为N的连续数列,给M次操作,每次操作给定一个数K,要求把当前数列中的第K个数移动到数列最前面,用链表实现,输出M次操作后的数列.#include#include#define LEN sizeof(st
#include
#include
#define LEN sizeof(struct Hn)
struct Hn
{
int num;
struct Hn *next;
};
struct Hn* creat(int n)
{
struct Hn * head,*p,*q;
head=NULL;
p= (struct Hn *)malloc(LEN);
printf("请输入数列元素:");
scanf("%d",&p->num);
head=p;
q=p;
while(n-1)
{
p= (struct Hn *)malloc(LEN);
scanf("%d",&p->num);
q -> next = p;
q=p;
--n;
}
q->next =NULL;
return head;
}
struct Hn *move(struct Hn *head,int a)
{
int j;
struct Hn *p,*k;
p=head;
if(head!=NULL)
{
for(j=1;jnext;
}
if(p==NULL||p->next==NULL)
{
printf("位置:%d非法,将自动跳过此操作.\n",a);
return head;
}
k=p->next;
p->next=k->next;
k->next=head;
head=k;
}
return head;
}
int main()
{
int M,i,a,N;
struct Hn *head,*q;
printf("请输入数列长度:");
scanf("%d",&N);
head=creat(N);
printf("请输入移动次数:");
scanf("%d",&M);
printf("请输入待前置的元素位置:");
for(i=0;inum);
q=q->next;
}while(q!=NULL);
printf("\n");
return 0;
}