你的程序用了链表,链表的交换可不是你程序中那么简单,修改如下:w->next=s;
p->next=s->next;
s->next=p;其中w指向p 的前一个结点,所以当p为头结点时交换代码如下:
p->next=s->next;
s->next=p;
p->next=s->next;
s->next=p;其中w指向p 的前一个结点,所以当p为头结点时交换代码如下:
p->next=s->next;
s->next=p;
解决方案 »
- 很是郁闷的一个问题 关于 _memccpy
- ListCtrl控件的用法问题
- 想问一个主线程,生成两个子线程,两个子线程间如何通讯?哪位有例子,并大概说一下,笨,不懂呀!
- 怎么使菜单按钮无效?比如说使FILE下的EXIT无效变灰色,我是新手,帮帮忙,HELP!!!
- 哪里有VC下载?或者VC++
- 请问如何在win98下,利用ddk开发vxd设备驱动程序?与win95下一样么?
- 高手进来!!在线等待!!
- 我在程序中申明一个变量 string strTemp,但是编译不过,是不是我没有包含关于string的头文件呀?
- 请问: 金山毒霸是用什么语言开的???
- 求教 输入法注入不成功
- 超菜问题!
- 谁有关于api的电子书??
struct pcb **kp=*k
在for循环之前加:
if(if(p->pri<s->pri)
{
p->next=s->next;
s->next=p;
}
w=s;s=p->next;
这样就OK了
你对指针的掌握程度很还不够深,须努力!下面的程序绝对没有任何问题,我特意在Visual C++下建立了一个链表进行测试了一下void bubblesort(struct pcb *k,int n)//n为要排序元素的个数
{
int i,j;
struct pcb *p,*s;
p=k;
pcb w;
if(p->next==NULL)
{
printf("it is NULL\n");
return ;
}
else
{
for(i=n;i>1;i--)
{
//每次遍历链表的时候均应该初始化指针变量
p=k;
s=p->next;
for(j=1;j<i;j++)
{
if(s)
if(p->pri<s->pri)
{
//在此不需要每次都开辟新的内存单元,
//你的做法很用以造成内存泄漏
//因为你的做法是不移动链表的内存逻辑结构
//从而,只需要一个局部变量w 并修改小相应 //的指针的数据即可,但是不要动指针的next 值
//否则就无法使用指针变量k 来返回链表的头 //指针了
w=*s;
s->pri=p->pri;
p->pri=w.pri;
}
if(s->next!=NULL)
{
p=s;
s=s->next;
}
}
}
}
}
{
int i,j;
struct pcb *p,*s;
p=k;
pcb w;
if(p->next==NULL)
{
printf("it is NULL\n");
return ;
}
else
{
for(i=n;i>1;i--)
{
//每次遍历链表的时候均应该初始化指针变量
p=k;
s=p->next;
for(j=1;j<i;j++)
{
if(s)
if(p->pri<s->pri)
{
//在此不需要每次都开辟新的内存单元,
//你的做法很容易造成内存泄漏
//因为你的做法是不改变链表的内存逻辑结构
//从而,只需要一个局部变量w 并修改相相应 //的指针的数据即可,但是不要动指针的next 值
//否则就无法使用指针变量k 来返回链表的头指针了
w=*s;
s->pri=p->pri;
p->pri=w.pri;
}
if(s->next!=NULL)
{
p=s;
s=s->next;
}
}
}
}
}