您的位置:首页 > 其它

链表节点交换

2014-07-08 20:18 162 查看
节点交换有两种思路,第一种是交换内容而不交换指针,第二种是直接改变指针而不交换节点内容。

链表节点定义如下:

struct stud        /*定义一个结构体类型struct stud*/
{
char sno[40];     //学号
char name[40];	  //姓名
float score[3];   //三科成绩
struct stud *next;    //下一节点
};


第一种思路的代码如下,首先涉及到交换函数的写法,归为两类,一类是数字交换,另一类是字符串交换。

指针实现的字符串交换代码如下:

void swap_s(char* src, char* dst)
{
char tmp ;
int a = strlen(src)>strlen(dst)?1:0;

tmp = *src;
*src=*dst;
*dst=tmp;

while(*src++ && *dst++)
{
tmp = *src;
*src=*dst;
*dst=tmp;
}

if(a)
{
while(*src)
{
dst++;
*dst=*src++;
}
*dst='\0';
}
else
{
while(*dst)
{
*src=*dst++;
src++;
}
*src='\0';
}
return ;
}

也可以这样写:

void swap_s(char *str1,char *str2)
{
char str[40];
char *p=str,*p1=str1,*p2=str2;
while((*p++=*p1++)!=NULL);
p=str;
p1=str1;
while((*p1++=*p2++)!=NULL);
p2=str2;
while((*p2++=*p++)!=NULL);
}


数字交换代码如下:

void swap_f(float* src, float* dst)
{
float tmp;
tmp = *src;
*src=*dst;
*dst=tmp;
return ;
}


节点交换代码:

void swap(Student *src,Student *dst)
{
Student *tmp = NULL;
swap_s(src->sno,dst->sno);
swap_s(src->name,dst->name);
swap_f(&src->score[0],&dst->score[0]);
swap_f(&src->score[1],&dst->score[1]);
swap_f(&src->score[2],&dst->score[2]);
return ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: