冰河时代2dj:写一段程序翻转字符串,例如,将“abcde”翻转“edcba”,不能使用任何字符串的库函数。

来源:百度文库 编辑:中科新闻网 时间:2024/04/30 01:06:30
13.写一段程序翻转字符串,例如,将“abcde”翻转“edcba”,不能使用任何字符串的库函数。你的程序的时间复杂度是多少?
感谢各位,我的过错,此题为JAVA题,不能用字符串库函数

#include<stdio.h>
main()
{
char a[5]="abcde";
int i;
char *p=&a[0],*q=&a[4];
char t;
for(;p!=q&&p>q;p++,q--)
{
t=*p;
*p=*q;
*q=t;
}
for(i=0;i<5;i++)
printf("%c",a[i]);
}

void Reverse(char *s)
{
char t;
char *p=s;
char *q=s;
while(*q) q++;
q--;
while(p<q)
{
t=*p;
*p=*q;
*q=t;
p++;
q--;
}
}

void main()
{
char a[6]="abcde";
Reverse(a);
printf("%s\n",a);
}

时间复杂度O(n)

用链表做的 你看看吧
#include <stdio.h>
#include <malloc.h>
typedef struct ym
{
char Data;
struct ym * Next;
}Zhizhen;

Zhizhen * Jl();//建立链表
void Xs(Zhizhen * Hend);//显示链表
void Zh(Zhizhen ** pHend);//转换链表

void main()
{
Zhizhen * Hend = NULL;
Hend = Jl();
if (NULL == Hend)
{
printf("没有建立链表! 程序结束!\n");
return;
}
if (NULL == Hend->Next)
{
printf("只有一个元素 %c 不能称为链表 程序结束!\n",Hend->Data);
return;
}
printf("原链表如下:\n");
Xs(Hend);
Zh(&Hend);
printf("转换后链表如下:\n");
Xs(Hend);
}

Zhizhen * Jl()
{
Zhizhen * Hend = NULL;
Zhizhen * p = NULL;
Zhizhen * q = NULL;
char Cdata = 'a';
int Temp = 0;
Cdata = getchar();
if (Cdata == 10 && Temp == 0)
{
return NULL;
Temp++;
}
Hend = (Zhizhen *)malloc(sizeof(Zhizhen));
Hend->Data = Cdata;
Hend->Next = NULL;
q = Hend;
Cdata = getchar();
while(Cdata != 10)
{
p = (Zhizhen *)malloc(sizeof(Zhizhen));
p->Data = Cdata;
p->Next = NULL;
q->Next = p;
q = p;
Cdata = getchar();
}
return Hend;
}

void Xs(Zhizhen * Hend)
{
int Temp = 1;
while(Temp)
{
printf("%c",Hend->Data);
if(NULL == Hend->Next)
{
Temp = 0;
}
else
{
Hend = Hend->Next ;
printf(" -> ");
}
}
printf("\n");
}

void Zh(Zhizhen ** pHend)
{
Zhizhen *p = *pHend;
Zhizhen *r = NULL;
Zhizhen *q = NULL;
q = p->Next;
while(q != NULL)
{
r = q->Next;
q->Next = p;
p = q;
q = r;
}
(*pHend)->Next = NULL;
*pHend = p;
}