當前位置:首頁 » 編程語言 » 逆置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;

}