当前位置:首页 » 编程语言 » 逆置c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

逆置c语言

发布时间: 2023-02-18 04:37:36

c语言,数组逆置

#include<stdio.h>
voidrevstr(char*s)
{
char*p=s,c;
while(*p)p++;
p--;
if(s<p)
{
c=*s;
*s=*p;
*p='';//递归之前,p的位置要置上结束符,否则再次进入函数时,p会一直找到原来的字符串结尾
revstr(s+1);
*p=c;//这里才把正确的字符填进去
}
}
intmain()
{
chars[100];
gets(s);
revstr(s);
printf("%s",s);
}

楼主的代码有些乱,我改了改,你看看。

Ⅱ 用C语言编写线性表的逆置的程序.

楼主你好!
关于你的问题,我已经将代码实现如下,如有错误,请指正!谢谢!
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
struct list{
int data;
struct list *next;
};
struct list*CreateList(int n){ //用于创建链表
struct list *head=NULL,*p,*q;
int i;
for(i=1;i<=n;i++){
p=(struct list*)malloc(sizeof(struct list));
printf("Please input the number:");
scanf("%d",&p->data);
if(head==NULL){head=p;}
else{q->next=p;}
q=p;
}
p->next=NULL;
return head;
}
void Output(struct list *head){ //用于将链表每个节点显示出来
while(head!='\0'){
printf("%d\n",head->data);
head=head->next;
}
}
struct list *Inverse(struct list *head){ //用于链表的逆转
struct list *p=NULL,*q;
while(head!=NULL){
q=p;
p=head;
head=head->next;
p->next=q;
}
head=p;
return head;
}
main(){
struct list *head;
head=CreateList(5);
head=Inverse(head);
Output(head);
getch();
}
希望我的回答对你有帮助!

Ⅲ c语言,数组元素的插入与逆置

#include<stdio.h>
#defineN10
voidmyinput(int*p,intn){
intt,i,j;
for(j=0;j<n;++j){
scanf("%d",p+j);
for(i=j;i>0;i--){
if(p[i]>=p[i-1])
break;
t=p[i],p[i]=p[i-1],p[i-1]=t;
}
}
}
voidmyreverse(int*a,intn){
inti,t;
for(n--,i=0;i<n;i++,n--)
t=a[i],a[i]=a[n],a[n]=t;
}
voidinsert(int*a,intnum,intn){
intj,k;
for(a[j=n-1]=num;j>0;j--){
if(a[j]>=a[j-1])
return;
k=a[j],a[j]=a[j-1],a[j-1]=k;
}
}
intmain(intargc,char*argv[]){
intn,b[N];
printf("输入%d个原始数据: ",N-1);
myinput(b,N-1);
for(n=0;n<N-1;printf("%d",b[n++]));
printf(" 请输入要插入的数:");
scanf("%d",&n);
printf("插入%d后的数据为: ",n);
insert(b,n,N);
for(n=0;n<N;printf("%d",b[n++]));
printf(" 逆序后为: ");
myreverse(b,N);
for(n=0;n<N;printf("%d",b[n++]));
printf(" ");
return0;
}

Ⅳ 如何用c语言实现单链表的逆置

扣着的是头节点(头子)

车是首节点(首子)

马是次节点(次子)

牙签细的是指针指向,香头发黑的是指向,铁头细的是指向。

根据步骤写程序的伪算法(3步4循环,7张图片搞定),如下:


第一个循环把马弄到车前面,

第二个循环把相弄到马前面

第三个循环把士弄到相前面

........

直到香指向为空后停止循环。

代码如下:只需要一个首结点pHead,就能把链表找到,并倒置。具体代码如下

p香=pHead->pNext;

p铁=p香->pNext;

p香->pNext=NULL;

P香=p铁

while(p香 !=NULL)

{

p铁=p香->pNext;

p香->pNext=pHead->pNext;

pHead->pNext=p香;

p香=p铁;

}


对照伪算法(三步四循环),和上面的代码是一一对应的:

第一步:香头指向首子,铁头指向次子

第二步:删掉首子指向次子(铁头所指向的那个子)的牙签

第三步:香头跟着铁头

以下循环条件:(条件:香头指向不为空)

{

循环1:铁头移动到香头的下一个指向

循环2:香头的下一个指向首子

循环3:头子的下一个跟着香头

循环4:香头跟着铁头

}

自己用道具操作几遍,然后把流程背会,以后自己根据流程写代码即可。

Ⅳ 用c语言实现单链表的逆置,能将此程序详细的解释一下吗

算法的核心就是reverse函数,其它的都是辅助建立链表和输出链表的。
从数据结构的定义来看这是一个带头节点的链表。要弄的十分明白你要耐心点画图看看。我简单的说下思路:
【head是指向头结点的】
p=head; //p最开始指向头结点
s=p->next; //s最开始指向第一个节点
while(s->next!=NULL)//只要没有到最后一个元素就继续。最后一个元素的next肯定为NULL
{ //进入核心了楼主
t=s->next; //用t指向s后面的那个元素
s->next=p; //把s指向她前面那个,这个时候就实现了逆向了。而且是就地逆向。元素都没有动的
p=s; //然后p向后移动s
s=t; //s向后移动到p
这样到下一轮的时候又可以讲下下个再指向刚才那个下一个。一次内推
}
s->next=p; //当最后一个的时候,还是要指向她的前一个。
head->next->next=NULL;//头指针的下一个是指向原来的第一个。逆向后肯定是最后的那个了。所以最后的一个的next=NULL就明了了。
head->next=s;//s是逆序前的最后一个,逆序后是第一个,所以用头指向他

画个图好好体会下,楼主!

Ⅵ 如何用c语言实现单链表的逆置

#include "stdio.h" x0dx0a#include"malloc.h" typedef struct node x0dx0a{ x0dx0a int data; x0dx0a struct node *next; x0dx0a}link; link *creat(int n) //创建链表 x0dx0a{ x0dx0a link *head,*p,*s; x0dx0a int i; x0dx0a p=head=(link *)malloc(sizeof(link)); x0dx0a for(i=1;i<=n;i++) x0dx0a { x0dx0a s=(link *)malloc(sizeof(link)); x0dx0a scanf("%d",&s->data); x0dx0a p->next=s; x0dx0a p=s; x0dx0a } x0dx0a p->next=NULL; x0dx0a return head; x0dx0a} void reverse(link *head)//原地置换 x0dx0a{ x0dx0a link *p,*s,*t; x0dx0a p=head; x0dx0a s=p->next; x0dx0a while(s->next!=NULL)//主要置换过程 x0dx0a { x0dx0a t=s->next; x0dx0a s->next=p; x0dx0a p=s; x0dx0a s=t; x0dx0a } x0dx0a s->next=p; x0dx0a head->next->next=NULL;//收尾 x0dx0a head->next=s;//赋头 x0dx0a} void display(link *head)//显示链表内容 x0dx0a{ x0dx0a link *p; x0dx0a p=head->next; x0dx0a while(p!=NULL) x0dx0a { x0dx0a printf("%d ",p->data); x0dx0a p=p->next; x0dx0a } x0dx0a printf("\n"); x0dx0a} void main() x0dx0a{ x0dx0a link *head; x0dx0a head=creat(5);//创建一个5个节点的链表 x0dx0a printf("原链表:\n"); x0dx0a display(head); x0dx0a reverse(head); x0dx0a printf("置换后链表:\n"); x0dx0a display(head); x0dx0a}

Ⅶ C语言编程题,求编写一个函数,实现字符串逆置

#include <stdio.h>

#include <string.h>

void reverse(char *x)

{

char c;

int a=0,b=strlen(x)-1;

for(;a<b;a++,b--)

{

c=x[a];

x[a]=x[b];

x[b]=c;

}

}

int main()

{

char s1[]="",s2[]="a";

char s3[]="sd",s4[]="dfg";

reverse(s1);

reverse(s2);

reverse(s3);

reverse(s4);

printf("%s %s ",s1,s2);

printf("%s %s ",s3,s4);

return 0;

}

输出

Ⅷ C语言: 编写程序,实现一维数组中元素的逆置。

#include<stdio.h>
intmain(){
inti,t,n,a[10];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n/2;i++)
{t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}
for(i=0;i<n;i++)
printf("%d",a[i]);
return0;
}

//运行示例:

Ⅸ 用C语言实现数组的逆置

#include <stdio.h>
int Input(int data[])
{
int i,n;
printf("输入数据个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&data[i]);
return n;

}
void Output(int data[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%d ",data[i]);
printf("\n");
}

void Reverse(int data[],int n)
{
int i,j,t;
for(i=0,j=n-1;i<j;i++,j--)
{
t=data[i];
data[i]=data[j];
data[j]=t;
}
}
int main(int argc, char *argv[])
{
int data[100],n;
int i,j;
n=Input(data);
Output(data,n);
Reverse(data,n);
Output(data,n);
return 0;
}
/*
10
2 3 4 5 6 7 8 9 10 11

*/

Ⅹ 单循环链表的逆置(C语言)

//单循环链表的逆置
#include <stdio.h>
#include <malloc.h>
#include <math.h>
#include <process.h>

typedef struct lnode
{
int data;
struct lnode *next;
}lnode ,*linklist;
//建立一个空表,初始化,并对其进行输入值

void creatlinklist(linklist &l,int n)
{
l=(linklist)malloc(sizeof(lnode));
if(!l)
exit(OVERFLOW);
l->next=l;//循环链表
linklist p,q;
int i;
q=l;
printf("please input %d data:\n",n);
for(i=0;i<=n-1;i++)
{
p=(linklist)malloc(sizeof(lnode));
scanf("%d",&p->data);
p->next=q->next;
q->next=p;
q=p;

}

}

//逆置函数
void invert(linklist &l)
{
linklist p,q,r;
p=l->next;
q=p->next;
r=q->next;

while(p!=l)
{
q->next=p;
p=q;
q=r;
r=r->next;

}

}

int main()
{
linklist l,p;
int length,i;
printf("please input the length of the list:\n");
scanf("%d",&length);
creatlinklist(l,length);
p=l->next;
while(p!=l)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
invert(l);
p=l->next;
while(p!=l)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");

return 0;

}