| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1295 人关注过本帖
标题:我是一个c++新手,求一个单链表的程序
只看楼主 加入收藏
Zeb_yinGD
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-4-2
结帖率:0
收藏
已结贴  问题点数:20 回复次数:7 
我是一个c++新手,求一个单链表的程序
求用单链表表示的多项式相加的程序。求哪位高手给个c++代码看看。
搜索更多相关主题的帖子: 单链 
2010-04-04 01:39
ltyjyufo
Rank: 9Rank: 9Rank: 9
来 自:未来
等 级:蜘蛛侠
威 望:2
帖 子:353
专家分:1166
注 册:2009-10-25
收藏
得分:3 
  自己多想想吧,理解深刻一点,画个流程图,这样好理解一点。

翱翔天空的雄鹰固然令人羡慕,却容易被禁锢于牢笼之中,只有那夜色中的蝙蝠才是真正自由的飞翔者....
2010-04-05 15:35
lyl6650421
Rank: 2
等 级:论坛游民
帖 子:13
专家分:26
注 册:2009-12-22
收藏
得分:3 
我感觉直接要程序没什么作用,因为那不是你自己的,如果是自己写出来了,调试不对,再提问这样会有更深刻的体会!
2010-04-05 18:57
慕白
Rank: 1
等 级:新手上路
帖 子:1
专家分:3
注 册:2010-3-11
收藏
得分:3 
同意二楼的说法,画个图就很好理解了,智者见智,每个人的都不一样~~
2010-04-05 20:42
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:3 
链表还要求啊  baidu 大把大把
2010-04-05 20:48
鶄鵅
Rank: 2
来 自:广东潮州
等 级:论坛游民
帖 子:40
专家分:17
注 册:2010-4-5
收藏
得分:3 
程序代码:
#include <iostream>
using namespace std;

struct T
{
    int coef;
    int exp;
};

struct Node
{
    T ax;
    Node *next;
};

class LinkList
{
public:
    LinkList( ){first = NULL;}
    LinkList(T a[], int n);
    ~LinkList( );
    void plus(LinkList &);
    void insert(Node *q);
    void show();
    Node *getFirst( ){ return first;}
private:
    Node *first;
};

LinkList::LinkList(T a[], int n)    //创建链表
{
    first = new Node;
    first->next = NULL;
    for(int i=0; i<n; i++)
    {
        Node *p = new Node;
        p->ax.coef = a[i].coef;
        p->ax.exp = a[i].exp;
        p->next = first->next;
        first->next = p;
    }
}

LinkList::~LinkList()         //释放结点
{
    Node *p = first;
    while(p)
    {
        Node *q = p;
        p = p->next;
        delete q;
    }
}



void LinkList::plus(LinkList &B)    //多项式相加
{
    if(!first) first = B.getFirst( );
    else{
        if(!B.getFirst() || !B.getFirst()->next) return;
        else{
            if(first->next==NULL)
                first->next = B.getFirst( )->next;
            else{
                Node *p1 = first, *q1 = B.getFirst( );
                Node *p = p1->next, *q = q1->next;
                while(p && q)
                {
                    if(p->ax.exp < q->ax.exp)
                    { p1 = p; p = p->next;}
                    else if(p->ax.exp > q->ax.exp)
                    {
                        q1->next = q->next;
                        p1->next = q;
                        q->next = p;
                        p1 = p1->next;
                        q = q1->next;   
                    }
                    else if(p->ax.exp == q->ax.exp)
                    {
                        p->ax.coef = p->ax.coef + q->ax.coef;
                        if(p->ax.coef==0)
                        {
                            Node *pt = p;
                            p1->next = p->next;
                            p = p1->next;
                            delete pt;
                        }
                        else {p1 = p; p = p->next;}
                        Node *qt = q;
                        q1->next = q->next;
                        q = q->next;
                        delete qt;
                    }
                }
                if(q) p1->next = q;
            }
        }
    }
}




void LinkList::show()
{
    cout<<"多项式 = ";
    Node *p = first;
    while(p&&p->next)
    {
        p = p->next;
        cout<<p->ax.coef<<'X'<<p->ax.exp;
        if(!p->next) cout<<endl;
        else cout<<" + ";
    }
}

void main(void)
{
    T a[3] = {{2,3},{4,2},{5,1}};
    LinkList A(a, 3);
    A.show();
    T b[2] = {{6,4},{7,2}};
    LinkList B(b, 2);
    B.show();
    A.plus(B);
    A.show();
}

http://wzqinyes.blog./
  鶄 鵅 在 人 间 !
2010-04-05 20:52
jjg
Rank: 2
等 级:论坛游民
帖 子:67
专家分:42
注 册:2009-8-19
收藏
得分:3 


#include <iostream>
#include <string>
using namespace std;
//学生类
class student
{

public:
    student()
    {
        cout <<"请依次输入学生姓名、学号、成绩,中间用空格隔开"<<endl;
        cin>>name>>id>>score;
    }
    void show()
    {
        cout <<"姓名:" <<name <<"学号:" <<id<<"成绩:"<<score;
    }
    student* next;
    double score;
    string name;
    int id;
   
};

//链表类
class List      
{
private:
    student* head;
    int index;
    student* p;
public:
    student* init()               //初始链表
    {
        head=NULL;
        student* p=new student;
        p->next=head;
        head=p;
        return head;
    }
    void print()
    {
        student *p=head;
        while(p!=NULL)
        {
            p->show();
            p=p->next;
        }
    }
    student* insert(int index)    //插入
    {
        
        student* ps=new student;
        student* pt=find(index);
        if(index==0)
        {
            ps->next=head;
            head=ps;
        }
        else
        {
            ps->next=pt->next;
            pt->next=ps;
        }
        print();
        return head;
    }
    student* find(int index)        //查找
    {
        int n=0;
        student* p=head;
        while(n!=index&&p!=NULL)
        {
            n++;
            p=p->next;
        }
        return p;
    }
    void sort()                   //排序
    {
        student* p=head;
        student* q=head;
        for(p=head;p!=NULL;p=p->next)
        {
            for(q=head;q!=NULL;q=q->next)
            {
                if(p->score>q->score)
                {
                    string temp1;
                    int temp2;
                    double temp3;
                    temp1=p->name;
                    p->name=q->name;
                    q->name=temp1;

                    temp2=p->id;
                    p->id=q->id;
                    q->id=temp2;

                    temp3=p->score;
                    p->score=q->score;
                    q->score=temp3;
                }
            }
        }
         print();
    }



    student* Delete(int index)
    {
        student* pt=find(index);
        int index1=index-1;
        student*p=find(index1);
        if(pt==head)
        {
            
            head=head->next;
            delete pt;
        }
        else
        {
            int index1=index-1;
            student*p=find(index1);
            p->next=pt->next;
            delete pt;
        }
        print();
        return head;
    }
};


void main()
{
    List A;
    int a;
    int b;
    A.init();
    cout <<"当你输入1时表示要插入,输入2时表示删除,输入0时表示结束" <<endl;
    cout<<"注意第一次插入只能在零位置插入";
    while(cin>>a&&a!=0)
    {
        switch(a)
        {  
        case 1: cout <<"输入要插入的位置:";
            cin>>b;
            A.insert(b);
            break;
        case 2: cout <<"输入要删除的位置:";
            cin>>b;
            A.Delete(b);
            break;
        default:cout <<"输入错误" <<endl;
        }
    }
    A.sort();
   
}   


//CPoint
2010-04-06 21:45
猎豹
Rank: 1
来 自:河南
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-4-10
收藏
得分:0 
#include<iostream>
#include<fstream>
#include<iomanip>
using namespace std;
struct student
{
     char name[20];
     int year;
     int month;
     student *next;//下一个学生结点指针
};
int num=0;
//s表示一组学生信息链表的表头指针
void input_student(student *&s);
//采用插入法,边插入边按由大到小排序
//形参*&s表示s是一个引用指针,用于返回输入的指针值
void output_student(student *p);
//输出p为头指针的链表表示的学生信息。
void save_student(char *n,student *p);
//将以p为头指针的链表表示的学生信息保存在以字符串n为文件名的磁盘文件中
int main()
{
    student *s=NULL;//s为链表头指针
    cout<<"请输入一组学生数据"<<endl;
    input_student(s);
    cout<<"学生信息为"<<endl;
    output_student(s);
    cout<<"将学生信息保存在磁盘文件中,输入磁盘文件名"<<endl;
    char name[20];
    cin>>name;
    save_student(name,s);
    system("pause");
    return 0;
}
void input_student(student *&s)
{
     student *t;//流动结点指针,用于指向新产生的结点
     cout<<"请输入学生信息"<<endl;
     do
     {
        char name[20];
        int year,month;
        cout<<"学生姓名(*为终止标志):";cin>>name;
        if(strcmp(name,"*")==0)break;
        cout<<"学生出生年份:";cin>>year;
        cout<<"学生出生月份:";cin>>month;
        num++;
        t=new student;
        //t->name=name;
        strcpy(t->name,name);
        t->year=year;
        t->month=month;
        t->next=NULL;
        //给新结点填充数据,下一项指针next置空
        if(!s)//原头指针空
          s=t; //新结点指针作为头指针
        else
        {
            student *p=s;//p作为循环用的流动指针,从头指针开始
            if(t->year>p->year||(t->year==p->year&&t->month>=p->month))
            //t指向的结点比原来头指针指向的结点大
            {
               s=t;//t取代头指针s,原头指针p作为新头指针s的后继
               s->next=p;
            }                                   
            else
            {
                student *q;//设置指针q用于查找新指针t在链表中位置的前驱
                while(p&&(t->year<p->year)||(t->year==p->year&&t->month<p->month))
                //查找新结点应该插入的位置q之后p之前
                {
                   q=p;
                   p=p->next;
                }// while循环终止时,有两种情况,1,t在q和p之间直接插入
                //2,t在结尾之后q指向尾结点,p空指针,将t接在q后,t接空指针
                q->next=t;
                t->next=p;
            }
        }
     }while(1);//while条件永真,出口设在输入姓名“*”处
}
void output_student(student *p)
{
     student *t=p;//t作为流动指针
     cout<<"共有"<<num<<"个学生,从小到大排列为"<<endl;
     cout<<setw(10)<<"姓名"<<setw(10)<<"出生年份"<<setw(10)<<"出生月份"<<endl;
     while(t)//t不空,表示t所指向的结点存在,输出相关信息
     {
        cout<<setw(10)<<t->name<<setw(10)<<t->year<<setw(10)<<t->month<<endl;
        t=t->next;
     }
}
void save_student(char *n,student *p)
{
     ofstream out(n,ios::out|ios::binary);
     if(!out)
     {
        cout<<"磁盘文件"<<n<<"打开失败"<<endl;
        system("pause");
        return;
     }
     out.write((char*)&num,sizeof(int));
     //保存学生人数,以便读文件时使用
     for(student *t=p;t;t=t->next)
     {
      //t作为流动指针,从头指针p开始,当前结点输出之后,指针后移一项
        out.write((char*)t,sizeof(student));
        //第一个参数是输出数据的位置,即指针t所指结点的地址
        //即&(*t),实际上就是t
        //第二个参数是输出数据的长度,即输出一个结点的长度
      }
      out.close();
      cout<<"输出结点的个数为"<<num<<endl;
}                                                                 
                                                                  
                 
                                   
     
     
 
  
2010-04-27 20:21
快速回复:我是一个c++新手,求一个单链表的程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031874 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved