队列实现对有n个元素的数组循环左移k位
来源:互联网 发布:非线性优化算法 编辑:程序博客网 时间:2024/04/30 11:26
基本思想:利用队列求解将使问题简单化,将数组的0-(k-1)存入队列,然后将数组k-(n-1)依次左移k位,然后顺序出列,具体算法如下:
#include<stdio.h>#include<stdlib.h>#define MAXSIZE 100typedef struct {int data[MAXSIZE];int front,rear;}SeqQueue,*PSeqQueue;PSeqQueue Init_SeqQueue(){//创建一个队列PSeqQueue Q;Q=(PSeqQueue)malloc(sizeof(SeqQueue));if(Q){Q->front=0;Q->rear=0;}return Q;}int Empty_SeqQueue(PSeqQueue Q){// if(Q&&Q->front==Q->rear) return 1; else return 0;}int In_SeqQueue(PSeqQueue Q,int x){//进队操作if((Q->rear+1)%MAXSIZE==Q->front){printf("队满!");return 0;}else{Q->rear=(Q->rear+1)%MAXSIZE;Q->data[Q->rear]=x;return 1;}}int Out_SeqQueue(PSeqQueue Q,int *x){//出队操作if(Empty_SeqQueue(Q)){printf("队空!");return 0;}else{Q->front=(Q->front+1)%MAXSIZE;*x=Q->data[Q->front];return 0;}}int Front_SeqQueue(PSeqQueue Q,int *x){//取队头元素if(Q->front==Q->rear){printf("队空!");return -1;}else{*x=Q->data[Q->front+1]%MAXSIZE;return 1;}}void Destroy_SeqQueue(PSeqQueue *Q){//销毁队列if(*Q)free(*Q);*Q=NULL;}void Array_left_move(int a[],int n,int k){//左移k位int i;PSeqQueue Q;Q=Init_SeqQueue();for(i=0;i<k;i++)In_SeqQueue(Q,a[i]);//0到k-1的元素入队列for(i=k;i<n;i++)a[i-k]=a[i];//k到n-1的元素左移k位i=n-k;//i移动到n-k位while(!Empty_SeqQueue(Q)){Out_SeqQueue(Q,&a[i]);//元素出队列,插入n-k到n-1的位置++i;}}int main(){int a[100],i,j;int n,k;printf("请输入要对多少个元素进行移动:");scanf("%d",&n);printf("请一次输入这%d个元素:",n);for(i=0;i<n;i++)scanf("%d",&a[i]);printf("请问要左移多少位:"); scanf("%d",&j);Array_left_move(a,n,j);printf("移动后的数组为:");for(i=0;i<n;i++)printf("%d ",a[i]);return 0;}
- 队列实现对有n个元素的数组循环左移k位
- 把一个含有N个元素的数组循环右移K位
- 把一个含有N个元素的数组循环右移K位, 要求时间复杂度为O(N)
- 在时间复杂度O(n)内,实现将数组A[n]中所有元素左循环移n位
- 【Java实现】一个n个元素的数组,求右移k位后的数组
- 数组循环左移k位
- 将N个字符的数组,循环右移K位。时间复杂度O(N)
- 将N个字符的数组,循环右移K位。时间复杂度O(N)
- 将N个字符的数组,循环右移K位。时间复杂度O(N)
- 将N个字符的数组,循环右移K位。时间复杂度O(N)。
- 将数组 a[n]所有的元素循环右移k位
- 实现字符串循环右移n 位与左移n位(建立数组)
- 将N个字符的数组,循环右移K位。
- 对于给定的数组,循环左移p个元素
- 将数组A中的元素A[0..n-1]循环右移k位
- 将数组中的元素循环左移 p 个元素
- 实现字符串循环右移n 位与左移n位(不建立数组,直接用指针)
- 实现字符串循环右移n 位与左移n位(不建立数组,直接用指针)
- 第三课堂作业
- C语言---变长参数列表---变长参数的传递
- c语言内存对齐
- 反戈
- (排序)用C语言实现的简单选择排序(选择排序,其实个人认为也是交换排序)
- 队列实现对有n个元素的数组循环左移k位
- java 震动提示窗体
- mysql卸载后重装失败的解决方法
- HDU2716:Message Decowding
- C++Primer笔记(包含string、vector和数组指针)
- 如何交换两个变量的值
- 缓存简析
- 【暗恋99天】下载
- linux下鼠标键盘按键的模拟