左旋转字符串(栈和队列)

左旋转字符串(栈和队列)

时间: 1ms        内存:1000M

描述:

题目:
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。

输入:

输入:

abcdef

输出:

输出:

cdefab

示例输入:

unbreakable

示例输出:

breakableun

提示:

参考答案(内存最优[748]):

#include<stdio.h> 
#include<stdlib.h> 
typedef char ElemType; 
typedef struct qnode 
{ 
    ElemType data; 
    struct qnode *next; 
}QNode; 
typedef struct
{ 
    QNode *front; 
    QNode *rear; 
}LiQueue; 
void enQueue(LiQueue *q,ElemType e) 
{ 
    QNode *s; 
    s=(QNode *)malloc(sizeof(QNode)); 
    s->data=e; 
    s->next=NULL; 
    if(q->rear==NULL) 
        q->front=q->rear=s; 
    else
    { 
        q->rear->next=s; 
        q->rear=s; 
    } 
} 
void deQueue(LiQueue *q) 
{ 
    QNode *t; 
    t=q->front;    
    q->front=q->front->next; 
    free(t); 
} 
int main() 
{ 
    LiQueue *q; 
    ElemType c; 
    int n=2; 
    q=(LiQueue *)malloc(sizeof(LiQueue)); 
    q->front=q->rear=NULL; 
    while((c=getchar())!=EOF) 
        enQueue(q,c); 
    while(n--) 
    { 
        c=q->front->data; 
        deQueue(q); 
        enQueue(q,c); 
    } 
    while(q->front!=q->rear) 
    { 
        printf("%c",q->front->data); 
        deQueue(q); 
    } 
    printf("%c",q->front->data); 
    return 0; 
} 

参考答案(时间最优[0]):

#include<stdio.h> 
#include<stdlib.h> 
typedef char ElemType; 
typedef struct qnode 
{ 
    ElemType data; 
    struct qnode *next; 
}QNode; 
typedef struct
{ 
    QNode *front; 
    QNode *rear; 
}LiQueue; 
void enQueue(LiQueue *q,ElemType e) 
{ 
    QNode *s; 
    s=(QNode *)malloc(sizeof(QNode)); 
    s->data=e; 
    s->next=NULL; 
    if(q->rear==NULL) 
        q->front=q->rear=s; 
    else
    { 
        q->rear->next=s; 
        q->rear=s; 
    } 
} 
void deQueue(LiQueue *q) 
{ 
    QNode *t; 
    t=q->front;    
    q->front=q->front->next; 
    free(t); 
} 
int main() 
{ 
    LiQueue *q; 
    ElemType c; 
    int n=2; 
    q=(LiQueue *)malloc(sizeof(LiQueue)); 
    q->front=q->rear=NULL; 
    while((c=getchar())!=EOF) 
        enQueue(q,c); 
    while(n--) 
    { 
        c=q->front->data; 
        deQueue(q); 
        enQueue(q,c); 
    } 
    while(q->front!=q->rear) 
    { 
        printf("%c",q->front->data); 
        deQueue(q); 
    } 
    printf("%c",q->front->data); 
    return 0; 
} 

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞