回 帖 发 新 帖 刷新版面

主题:循环链表移动

我最近写了一个循环移动的算法,可是总是出错,求高手相助找下错。我觉得可能是展示函数出错了吧。。。。。
#include<iostream>
using namespace std;
typedef struct Clist
{
    char data;
    struct Clist *next;
}*Link;
Link Creat(Link &S)//初始化一个循环链表,并给把第一个字符放入头节点
{
    S=(Link)malloc(sizeof(Clist));
    cout<<"Please input the first data"<<endl;
    cin>>S->data;
    S->next=S;
    return S;
}
void input(Link &S,int n)//输入剩下的n-1个字符
{
    Link p,s;
    s=Creat(S);    
    int i;
    cout<<"Please input the other data of you key"<<endl;
    for(i=n-1;i>0;i--)
    {
      p=(Link)malloc(sizeof(Clist));
      cin>>p->data;
      p->next=s->next;
      s->next=p;
      s=p;
    }
    
}
void display(Link &S)
{
    Link p;
    p=S;
    while(p!=S)
    {
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<endl;
}
bool Move(Link &S,int n)//循环链表移动。
{
    Link p,h,r,q;
    p=S;
           h=p;
    while(n!=0)
    { 
        q=p->next;
               r=(Link)malloc(sizeof(Clist));
        while(q->next!=h)          
        {
           p=p->next;
           q=q->next;
        }
               r->data=q->data;
               r->next=q->next;
               p->next=r;
                      p=r;
               h=p;
               free(q);
               n--;
    }
    display(p);
    return true;
}
void main()
{
    Link S;
    int num1,num2;
    cout<<"Please input the num of your key"<<endl;
    cin>>num1;
    input(S,num1);
    cout<<"Please input the mima"<<endl;
    cin>>num2;
    Move(S,num2);
    if(Move(S,num2))
        cout<<"You have set successfully"<<endl;
    else
        cout<<"please try again"<<endl;
}

回复列表 (共6个回复)

沙发

操作内存出现错误了

板凳

错误可能是在初始化的时候,主要是申请了内存没有初始化,或者是删除后没有修改链表指针的值。

3 楼


while里的条件判断不对

还有move 的太麻烦

直接移动指针就ok

4 楼

你好.我是全职网赚工作者.
如果你有时间有电脑.
想在网络上创业.请联系我..
项目绝对真实.详情QQ空间资料
加盟请联系 QQ908889846

5 楼

abcdefghijklmnopqrstuvwxyz

6 楼


3000元/月急聘网络兼职打字员(适合在校学生兼职)

公司是专业为国内外出版社、印刷企业与文章小说网站提供打字录入排版校对的专业外包公司,主要提供的业务有打字、排版、校对、信息维护。公司接受2000多家客户的文字外包业务,现向全国公开急聘网络兼职输入员1000名。要求会打字,工作认真仔细,不限学历和年龄。由于前期工作任务有一定难度,工资也相应较高,工资130元/万字,工资通过支付宝、银行转帐、办事处专员送达方式日结。
职位名称:网络兼职打字员 
职位要求:会电脑打字,懂WORD软件,上网比较熟练。地区、年龄不限。
职位性质:公司将小说手稿扫描后,EMAIL至员工邮箱或专人送达,员工完成WORD输入后发至公司 邮箱即可,适合在校学生。
工作地点:家里、网吧均可工作。(能上网即可)
职位待遇:130元/万字,工资每日结算。 
职位介绍:主要工作是负责打字、资料入录,发布信息等,工作简单,但要求细心,有责任心,为人诚实。
网络兼职打字员
申请加入请登录:www.gfwo.cn
邮箱:vipcnzp@126.com
(绝不以任何理由收取押金,手续费,更不会拖欠工资)

我来回复

您尚未登录,请登录后再回复。点此登录或注册