c语言结点交换函数 c语言交换值的函数指针

c语言中链表如何交换节点?

链表交换节点有两种方式:

专业成都网站建设公司,做排名好的好网站,排在同行前面,为您带来客户和效益!创新互联建站为您提供成都网站建设,五站合一网站设计制作,服务好的网站设计公司,成都网站制作、网站设计、外贸网站建设负责任的成都网站制作公司!

1.

交换结点内容

2.

交换结点位置

如定义以下结构体,分为数据部分和链表指针部分

struct _data {

int num;

float score;

} ;

struct stu

{

struct _data data;

struct stu *next;

}*head, *p1,*p2,*p3,*p4;

head-p1-p2-p3-p4 ;交换结点内容,结点顺序不变,依然保持原样,则交换两个结点时,只交换数据部分,next指针不要动,如:交换p1和p3的内容(数据):

struct _data t=p1-data;p1-data=p3-data;p3-data=t ;//这样就可以了。交换结点位置,链表的顺序会发生变化,为保持链表的正常衔接,则要重新设置next的值,过程略有复杂,如:交换p1,p3的位置:最终变成:head-p3-p2-p1-p4

;

首先,要找到p1的原前趋结点head,和p3的前趋结点p2

然后,开始重新分配链表的排列:

1、p1的原前趋结点(head)的新后继结点 要变成p3

2、p1的新后继结点要变成p3的原后继结点(p4)

3、p3的原前趋结点(p2)的新后继结点 要变成p1

4、p3的新后继结点要变成p1的原后继结点(p2)

struct stu *p1p, *p3p, *p;

for( p=head;p!=NULL;p=p-next )

{

if ( p-next==p1 )

p1p=p; //找到p1的前趋head

if ( p-next==p3 )

p3p=p;//找到p3的前趋p2

}

p1p-next=p3;//p1的原前趋结点 的 新后继结点 变成p3 head-p3

struct stu *tNext=p1-next ; //保存p1的原后继结点(p2)

p1-next=p3-next; //p1的新后继结点要变成p3的原后继结点(p4) p1-p4

p3p-next=p1; //p3的原前趋结点 的 新后继结点 变成p1 p2-p1

p3-next=tNext ; //p3的新后继结点 变成p1的原后继结点 p3-p2

c语言函数的使用,定义一个交换函数 实现2个数字的交换。

void Swap(intx,inty)

{

int temp=0;

temp=x;

x=y;

y=temp;

}

int main()

{

int a=1;

int b=2;

Swap(a,b);

coutlt;lt;"a="lt;lt;alt;lt;endl;

coutlt;lt;"b="lt;lt;blt;lt;endl;

system("pause");

return 0;

}

运行结果:

扩展资料:

用指针交换:

void Swap(int*x,int*y)

{

int temp=0;

temp=*x;

*x=*y;

*y=temp;

}

int main()

{

int x=1;

int y=2;

Swap(x,y);

printf("x=%d,y=%d\n",x,y);

system("pause");

return 0;

}

运行结果:

X=2;Y=1

c语言编写一个程序,通过改变指针来交换链表中的两个相邻的结点,

如有不懂可留言

void NodSwap(struct node *A_1, struct node *A_2, struct node *A_3)

{

A_1-next = A_3;

A_2-next = A_3-next;

A_3-next = A_2;

}

调换的是A_1\A_2结点,可以直接调用

c语言,交换函数

交换函数很好写。

比较难的读文件。文件格式 与 读语句要 相配。 特别是 多余 的 空行和回车键。

调试时用 printf 语句 检查 读得对不对。

fgets() 函数可用来读整行的字符串,含回车键。

#include stdio.h

#includestdlib.h

void jh(char *a, char *b){

char x[100];

strcpy(x,a),strcpy(a,b),strcpy(b,x);

}

int main(){

FILE *fp;

int n,i,j;

char a[100];

char b[100];

char ch;

if((fp=fopen("2.2.txt","r"))==NULL){

printf("Error");

exit(0);

}

fgets(a,100,fp);

sscanf(a,"%d",n);

//printf("n=%d\n",n);

for(j=1;j=n;j++){

fgets(a[0],100,fp);

//printf("read a: %s",a);

fgets(b[0],100,fp);

// printf("read b: %s",b);

printf("Case %d\n",j);

jh(a,b);

printf("%s",a);

printf("%s",b);

fgets(a[0],100,fp); // 假定2组数间只有一个空白行,则用它跳过。

}

fclose(fp);

return 0;

}

C语言问题:怎样实现对链表中两个结点的交换

有2方法:

第一,找到要交换的2个结点,将2个结点内的数据交换就完成2个结点交换.

因为2个结点不同就是2个结点内数据有区别.

第二,拿掉2个结点,并保持链表完好,再将2结点前后倒置,插到原位置.

当然,如果是双向链表要麻烦些,但思路是一致的.


分享名称:c语言结点交换函数 c语言交换值的函数指针
文章分享:http://myzitong.com/article/hppgsj.html