数据结构考研问题一道,,高手都来!!我急啊。。等待

huwei_008 2004-10-19 12:55:56
题目要求:分析以下算法的功能

typedef struct lnode
{elemtype data;
struct lnode *next;
}lnode,*linklist;

void aaa(linklist h)
/*h为循环单链表的头指针*/
{
linklist p,q,r;
p=h;
q=p->next;
while(p!=q)
{
r=h;
while(r->next!=p) r=r->next;
p->next=r;
p=p->next;
}
q->next=h;
}

请说明详细思路,谢谢!
...全文
186 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxc014 2004-10-19
  • 打赏
  • 举报
回复
void aaa(linklist h)
/*h为循环单链表的头指针*/
{
linklist p,q,r;
p=h;
q=p->next;
while(p!=q)
{
r=q; /*这儿*/
while(r->next!=p) r=r->next;
p->next=r;
p=p->next;
}
q->next=h;
}
cxc014 2004-10-19
  • 打赏
  • 举报
回复
//是实现一个链表倒置;
void aaa(linklist h)
/*h为循环单链表的头指针*/
{
linklist p,q,r;
p=h;
q=p->next;
while(p!=q)
{
r=q; /*这儿*/
while(r->next!=p) r=r->next;
p->next=r;
p=p->next;
}//这个地方好像会有个死循环?
q->next=h;
}
daylove 2004-10-19
  • 打赏
  • 举报
回复
这个函数的功能应该是一个把链表倒置。
huwei_008 2004-10-19
  • 打赏
  • 举报
回复
如果该功能是为了实现“把一个循环单链表反向”,那么以上程序应作何调整? 谢谢
kobefly 2004-10-19
  • 打赏
  • 举报
回复
while(r->next!=p) r=r->next;//跳过相同数据
???????????
两个节点的比较
又不是节点值的比较
怎么可能是跳过相同数据呢?
请给出原因
谢谢
cnxiaohai 2004-10-19
  • 打赏
  • 举报
回复
void aaa(linklist h)
/*h为循环单链表的头指针*/
{
linklist p,q,r;
p=h;//标记头节点,明显知道这是一个循环链表
q=p->next;//Q是一个工作节点
while(p!=q)//当链表循环一遍的时候结束循环
{
r=h;//比较链表开始
while(r->next!=p) r=r->next;//跳过相同数据
p->next=r;//连接到第一个非相同数据的节点
p=p->next;
}
q->next=h;
}

这个算法的作用就是消除链表中的相同项
比如数据是:aaabbbbbccdddddddddd

结果就是abcd
kobefly 2004-10-19
  • 打赏
  • 举报
回复
不可能的
楼主
明显的在while()语句第2执行的时候就进入死循环了啊
打了个结
huwei_008 2004-10-19
  • 打赏
  • 举报
回复
程序检查了一遍,没有写错
关键是思路,能提供以下么?
爱饮四坛 2004-10-19
  • 打赏
  • 举报
回复
看这段程序大意是想把一个循环单链表反向了,但程序有问题,出现死循环。
realmz 2004-10-19
  • 打赏
  • 举报
回复
void aaa(linklist h)
/*h为循环单链表的头指针*/
{
linklist p,q,r;
p=h;
q=p->next;
while(p!=q)
{
r=h;
while(r->next!=p) r=r->next;
p->next=r;
p=p->next;
}
q->next=h; ???这句是不是应该在大括号里面
}
这个函数的功能应该是一个把链表倒置。
dingzhongfeng 2004-10-19
  • 打赏
  • 举报
回复
gz
kobefly 2004-10-19
  • 打赏
  • 举报
回复
看了一下
感觉好像有点问题
typedef struct lnode
{elemtype data;
struct lnode *next;
}lnode,*linklist;

void aaa(linklist h)
/*h为循环单链表的头指针*/
{
linklist p,q,r;
p=h;
q=p->next;
while(p!=q)
{
r=h;
while(r->next!=p) r=r->next;
p->next=r;
p=p->nexttypedef struct lnode
{elemtype data;
struct lnode *next;
}lnode,*linklist;

void aaa(linklist h)
/*h为循环单链表的头指针*/
{
linklist p,q,r;
p=h;
q=p->next;
while(p!=q)
{
r=h;
while(r->next!=p) r=r->next;
p->next=r;
p=p->next;
}typedef struct lnode
{elemtype data;
struct lnode *next;
}lnode,*linklist;

void aaa(linklist h)
/*h为循环单链表的头指针*/
{
linklist p,q,r;
p=h;
q=p->next;
while(p!=q)
{
r=h;
while(r->next!=p) r=r->next;
p->next=r;
p=p->next;
}typedef struct lnode
{elemtype data;
struct lnode *next;
}lnode,*linklist;

void aaa(linklist h)
/*h为循环单链表的头指针*/
{
linklist p,q,r;
p=h;
q=p->next;
while(p!=q)
{
r=h;
while(r->next!=p) r=r->next;
p->next=r;
p=p->next;
}//这个地方好像会有个死循环?
q->next=h;
}
yangfasheng 2004-10-19
  • 打赏
  • 举报
回复
MARK
有时间来看.
w1024www 2004-10-19
  • 打赏
  • 举报
回复
算法的功能还不就是 把两块struct lnode结构体链在一起,链成一个单向循环体(和键盘的缓冲区有异曲同工之处)
snowingbf 2004-10-19
  • 打赏
  • 举报
回复
typedef struct lnode
{elemtype data;
struct lnode *next;
}lnode,*linklist;

void aaa(linklist h)
/*h为循环单链表的头指针*/
{
linklist p,q,r;
p=h;//定位开始位置
q=p->next;//定位终点
while(p!=q)//条件
{
r=h;//开始循环
while(r->next!=p) r=r->next;//如结点非1,前进到链尾
p->next=r;//断开环,反向//接上环//2次后死循环
p=p->next;//p做尾//p做首
}
q->next=h;
}

luotofeng 2004-10-19
  • 打赏
  • 举报
回复
我刚看啊。还不明白啊。明白通知道你啊。刚学数据结构

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧