单链表实现的多项式加减法计算,输入的负号变成了正号,并且幂为负时显示错误,这个程序应该怎么改?
//vc6.0实现的C++版![图片说明](https://img-ask.csdn.net/upload/201907/23/1563861033_43306.png)![图片说明](https://img-ask.csdn.net/upload/201907/23/1563861045_50819.png)


//功能:多项式的加减法操作
#include <iostream.h>//读入必须包含的头文件
#include <windows.h>//清屏和颜色设置需要
#include <string.h>
#include <fstream.h>
#include <iomanip.h>
#include <math.h>//处理方幂运算

enum returninfo{success,wrong,fail,overflow,underflow,empty_error};//定义返回信息清单
const int Maxsize=26;//系统允许多项式的最大值
const int Number=40;//设置输入多项式时字符串长度最大限,也可以根据需求任意设置
int order;//设置多项式显示方式0代表降幂显示,1代表升幂显示

class node//定义一个node类,处理多项式中的<项>:如3x^(-2)、4x^3、6x或者常数5等等
{
public:
    node(int initcoeff,int initindex,node *initnext=NULL);//系数、指数、后继结点
    node(node *initnext=NULL);//后继结点函数重载:用于头结点
    ~node();

    int coeff;//系数
    int index;//指数
    node *next;
};

node::node(int initcoeff,int initindex,node *initnext)
{
    coeff=initcoeff;
    index=initindex;
    next=initnext;
}

node::node(node *initnext)
{
    next=initnext;
}

node::~node()
{
}

/*
定义一个线性表类linklist
*/
class linklist
{
public:
    linklist();//构造函数
    ~linklist();//析构函数
    void clearlist(void);//清除多项式
    bool empty(void) const;//判断是否空链
    node *headp;//多项式头结点
};

linklist::linklist()//构造函数
{
    headp = new node;//申请新结点,作为头结点
    headp->next=NULL;//头结点的地址域预设为空地址
}

linklist::~linklist()//析构函数
{
    clearlist();//删除所有数据,释放所有结点
    delete headp;//把头结点也释放掉
}

void linklist::clearlist(void)//清除多项式
{
    node *searchp=headp->next,*followp=headp;//初始化两个指针
    while(searchp!=NULL)
    {
        followp=searchp;
        searchp=searchp->next;
        delete followp;
    }
    headp->next=NULL;//保留了最后一个结点,就是头结点,并且链域置为空
}

bool linklist::empty(void) const//判断是否空链
{
    if(headp->next==NULL)
        return true;
    else
        return false;
}

/*
实现多项式加减法的类sequelist
*/
class sequelist//管理多项式
{
public:
    sequelist();
    ~sequelist();
    returninfo inputdata(void);//从键盘输入多项式
    returninfo deletdata(void);//清空多项式信息
    returninfo calculate(void);//赋值计算
    void addnode(int site,int icoeff,int iindex);//增加项
    void display(char name);//显示某个多项式
    void displayname(void);//显示系统中现存多项式的名称
    void traveral(void);//遍历所有多项式
    void deletepart(char idata);//清除单个多项式信息
    void deletcomp(void);//清除全部多项式信息
    bool findlist(char idata);//查找多项式(提供多项式名称)
    bool scanname(char idata);//判断多项式的名称是否合法
    bool read();//读文件操作
    bool write();//写文件操作
protected:
    linklist list[Maxsize];
};

sequelist::sequelist()
{
}

sequelist::~sequelist()
{
}

returninfo sequelist::deletdata(void)//清空多项式信息
{
    int choice,site;
    char ch,name;
    cout<<"1.清空系统全部多项式信息"<<endl;
    cout<<"2.清除某个指定多项式信息"<<endl;
    cout<<"3.退出清除信息"<<endl;
    cout<<"请选择:";
    cin>>choice;
    if(choice==1||choice==2)
    {
        if(choice==1)
        {
            traveral();
            cout<<endl<<"请问:您确定要清空全部多项式信息吗?(Y/y):";
            cin>>ch;
            if(ch=='Y'||ch=='y')
                deletcomp();
            else
                return fail;
        }
        else
        {
            cout<<"请输入你要清空的多项式的名称(提示:一个大写字母):";
            cin>>name;
            site=int(name-'A');
            if(list[site].empty())
                return wrong;
            display(name);
            cout<<endl<<"请问:您确定要清除该多项式信息吗?(Y/y):";
            cin>>ch;
            if(ch=='Y'||ch=='y')
                deletepart(name);
            else
                return fail;
        }
        return success;
    }
    else
        return fail;
}

returninfo sequelist::calculate(void)//赋值计算
{
    int site,x,flag=0;
    double result=0,value;
    char name,ch;
    node *searchp;
    cout<<"请输入需要赋值计算的多项式名称(提示:一个大写字母):";
    cin>>name;
    site=int(name-'A');
    if(list[site].empty())
        return wrong;
    display(name);
    cout<<endl<<"请问:您确认要进行赋值计算吗?(Y/y):";
    cin>>ch;
    if(ch=='Y'||ch=='y')
    {
        cout<<"请给出变量x的值(如果方幂过大x不宜取大值):x=";
        cin>>x;
        cout<<endl<<name<<"("<<x<<")=";
        searchp=list[site].headp->next;
        while(searchp!=NULL)
        {
            value=searchp->coeff*pow(x,searchp->index);
            result+=value;
            cout<<" ";
            if(value>=0)
            {
                if(flag!=0)
                    cout<<"+";
            }
            cout<<value;
            flag++;
            searchp=searchp->next;
        }
        cout<<endl<<"  ="<<result<<endl<<endl;
    }
    else
        return fail;
    return success; 
}

void sequelist::display(char name)//显示某个多项式
{
    cout<<name<<"(x)=";
    int site;
    site=int(name-'A');
    node *searchp=list[site].headp->next;
    if(searchp->coeff==0)
        cout<<"0";
    else if(searchp->coeff!=1&&searchp->coeff!=-1)
    {
        if(searchp->index==0)
            cout<<searchp->coeff;
        else if(searchp->index==1)
            cout<<searchp->coeff<<"x";
        else if(searchp->index<0)
            cout<<searchp->coeff<<"x^("<<searchp->index<<")";
        else
            cout<<searchp->coeff<<"x^"<<searchp->index;
    }
    else
    {
        if(searchp->index==0)
            cout<<searchp->coeff;
        else if(searchp->index==1)
            cout<<searchp->coeff<<"x";
        else if(searchp->index<0)
            cout<<searchp->coeff<<"x^("<<searchp->index<<")";
        else
            cout<<searchp->coeff<<"x^"<<searchp->index;
    }
    searchp=searchp->next;
    while(searchp!=NULL)
    {
        cout<<" ";
        if(searchp->coeff!=1&&searchp->coeff!=-1)
        {
            if(searchp->index==0)
            {
                if(searchp->coeff>0)
                    cout<<"+";
                cout<<searchp->coeff;
            }
            else if(searchp->index==1)
            {
                if(searchp->coeff>0)
                    cout<<"+";
                cout<<searchp->coeff<<"x";
            }
            else if(searchp->index<0)
            {
                if(searchp->coeff>0)
                    cout<<"+";
                cout<<searchp->coeff<<"x^("<<searchp->index<<")";
            }
            else
            {
                if(searchp->coeff>0)
                    cout<<"+";
                cout<<searchp->coeff<<"x^"<<searchp->index;
            }
        }
        else if(searchp->coeff==1)
        {
            if(searchp->index==0)
                cout<<"+1";
            else if(searchp->index==1)
                cout<<"+x";
            else if(searchp->index<0)
                cout<<"+x^("<<searchp->index<<")";
            else
                cout<<"+x^"<<searchp->index;
        }
        else
        {
            if(searchp->index==0)
                cout<<"-1";
            else if(searchp->index==1)
                cout<<"-x";
            else if(searchp->index<0)
                cout<<"-x^("<<searchp->index<<")";
            else
                cout<<"-x^"<<searchp->index;
        }
        searchp=searchp->next;
    }
    cout<<endl;
}

void sequelist::deletcomp(void)//清除全部多项式信息
{
    int i;
    char name;
    for(i=0;i<Maxsize;i++)
    {
        name=char(i+'A');
        deletepart(name);
    }
}

void sequelist::deletepart(char idata)//清除单个多项式信息
{
    int site;
    site=int(idata-'A');
    node *searchp=list[site].headp->next,*followp;
    while(searchp!=NULL)
    {
        followp=searchp;
        searchp=searchp->next;
        delete followp;
    }
    list[site].headp->next=NULL;
}

returninfo sequelist::inputdata(void)//从键盘输入多项式(重点,难点,关键)
{
    char iname,idata[Number];
    node *searchp,*followp;
    int flag=0;//标志项系数正负(flag==1表示负,flag==0表示正)A=3x^(-2)+4x^3-6x^(-3)+5
    cout<<"请输入你要新建多项式的名称(提示:一个大写字母):";
    cin>>iname;
    if(scanname(iname))//名称通过检验
    {
        int site,icoeff=0,iindex=0,i=0,j=0,k=0;
        char data[20][20];//将输入的数据分项处理分成20块长度为20的项
        site=int(iname-'A');
        cout<<"请连续输入多项式不要有空格:"<<endl<<iname<<"(x)=";
        cin>>idata;
        //首先将第一项分开来处理
        data[k][i]=idata[i];
        while(idata[++i]!='+'&&idata[i]!='-'&&idata[i]!='\0')
            data[k][++j]=idata[i];
        data[k][++j]='\n';//项的最后一位以'\n'结束
        k++;//将项数加1,
        //从第二项开始往后的各项处理
        for(;idata[i]!='\0';)
        {
            j=0;//j还原为0
            data[k][0]=idata[i];//记录每一项的符号位
            while(idata[++i]!='+'&&idata[i]!='-'&&idata[i]!='\0')
            {
                data[k][++j]=idata[i];
                if(idata[++i]=='(')//指数为负的处理
                {
                    data[k][++j]=idata[i];
                    data[k][++j]=idata[++i];//将负号写入
                    i++;
                }
                i--;
            }
            data[k][++j]='\n';//项的最后一位以'\n'结束
            k++;//继续写下一项
        }//注意:此时的k后面会有用!!!
        //得到的data[20][20]为多项式的20个项
        for(i=0;i<k;)//将每一项分为node格式,并将其挂链对应的多项式上面
        {
            icoeff=0;
            iindex=0;
            j=0;
            if(data[i][0]=='-')//如果为负
            {
                flag=1;
                j++;
            }
            else if(data[i][0]=='+')//如果为正
            {
                flag=0;
                j++;
            }
            else
                flag=0;//这个是针对多项式的第一项为正的情况考虑的
            //项系数的确定
            while(data[i][j]>='0'&&data[i][j]<='9')
            {
                icoeff=icoeff*10+int(data[i][j]-'0');
                j++;
            }
            if(icoeff==0)
                icoeff=1;
            if(icoeff==1)
                icoeff=0-icoeff;//如果系数为负,则加上负号
            switch(data[i][j])//将data[i][j]分路:
            {
            case 'x'://此项为含x的项
                if(data[i][++j]=='\n')//指数为1的情况
                    iindex=1;
                else
                {
                    if(data[i][j]=='^')//后面紧接着是指数的情况(正和负)
                    {
                        if(data[i][++j]=='(')//指数为负的情况
                        {
                            j++;//跳过负号
                            while(data[i][++j]>='0'&&data[i][j]<='9')
                                iindex=iindex*10+int(data[i][j]-'0');
                            iindex=0-iindex;
                        }
                        else//指数为正的情况
                        {
                            j--;
                            while(data[i][++j]>='0'&&data[i][j]<='9')
                                iindex=iindex*10+int(data[i][j]-'0');
                        }
                    }
                    else
                    {
                        deletepart(iname);//清空现场再返回错误信息
                        return wrong;
                    }
                }
                //将项插入多项式中
                addnode(site,icoeff,iindex);
                break;
            case '\n'://此项为常数项
                iindex=0;
                addnode(site,icoeff,iindex);
                break;
            default://此项涉及到前面的多项式,如4A,5B,A*B等等
                int site1,site2;
                site1=int(data[i][j]-'A');
                if(site==site1||list[site1].empty())//如果为空
                {
                    deletepart(iname);//清空现场再返回错误信息
                    return wrong;
                }
                node *searchp1=list[site1].headp->next;
                if(data[i][++j]=='\n')//如4A,5B
                {
                    while(searchp1!=NULL)
                    {
                        addnode(site,(searchp1->coeff)*icoeff,searchp1->index);
                        searchp1=searchp1->next;
                    }
                }
                else if(data[i][j]=='*')//如3A*B等等
                {
                    site2=int(data[i][++j]-'A');
                    if(site==site2||data[i][++j]!='\n')
                    {
                        deletepart(iname);//清空现场再返回错误信息
                        return wrong;
                    }
                    if(list[site2].empty())//如果为空
                    {
                        deletepart(iname);//清空现场再返回错误信息
                        return empty_error;
                    }
                    node *searchp2=list[site2].headp->next;
                    while(searchp2!=NULL)
                    {
                        searchp1=list[site1].headp->next;
                        while(searchp1!=NULL)
                        {
                            addnode(site,(searchp1->coeff)*icoeff*(searchp2->coeff),(searchp1->index)+(searchp2->index));
                            searchp1=searchp1->next;
                        }
                        searchp2=searchp2->next;
                    }
                }
                else
                {
                    deletepart(iname);//清空现场再返回错误信息
                    return wrong;
                }
                break;
            }
            i++;
        }
        //到现在为止,多项式已经创建成功,下面进行系数项为0的清除工作
        followp=list[site].headp;
        searchp=list[site].headp->next;
        while(searchp!=NULL)
        {
            if(searchp->coeff==0)//系数项为0的清除
            {
                followp->next=searchp->next;
                delete searchp;
                searchp=followp;
            }
            followp=searchp;
            searchp=searchp->next;
        }
        if(list[site].headp->next==NULL)//多项式为0的情况
        {
            searchp=new node(0,0);//附加一个0项
            list[site].headp->next=searchp;
            searchp->next=NULL;
        }
        cout<<endl<<"新建多项式信息整理后如下:"<<endl;
        display(iname);//多项式显示
        return success;
    }
    return fail;
}
void sequelist::displayname(void)//显示系统中现存多项式的名称
{
    int j=0;
    cout<<"系统当前存在多项式的名称有:"<<endl;
    for(int i=0;i<Maxsize;i++)
    {
        if(!list[i].empty())
        {
            cout<<setw(4)<<char(i+'A');
            j++;
            if((j+1)%8==0)//每行显示7个多项式名称
                cout<<endl;
        }
    }
    cout<<endl<<"◇◇共"<<j<<"个多项式信息!"<<endl<<endl;
}

void sequelist::addnode(int site,int icoeff,int iindex)//增加项
{
    node *newnode,*searchp,*followp;
    if(list[site].empty())//如果为空
    {
        newnode= new node(icoeff,iindex);
        list[site].headp->next=newnode;
        newnode->next=NULL;
    }
    else
    {
        followp=list[site].headp;
        searchp=list[site].headp->next;
        if(order==1)//降序显示
        {
            while(searchp!=NULL&&searchp->index>iindex)
            {
                followp=searchp;
                searchp=searchp->next;
            }
        }
        else//升序显示
        {
            while(searchp!=NULL&&searchp->index>iindex)
            {
                followp=searchp;
                searchp=searchp->next;
            }
        }
        if(searchp!=NULL&&searchp->index==iindex)
        {
            searchp->coeff+=icoeff;//同类项合并
        }
        else//非同类项则按序插入
        {
            newnode=new node(icoeff,iindex);
            newnode->next=searchp;
            followp->next=newnode;
        }
    }
}

void sequelist::traveral(void)//遍历所有多项式
{
    int j=0;
    for(int i=0;i<Maxsize;i++)
    {
        if(!list[i].empty())
        {
            display(char(i+'A'));
            j++;
        }
    }
    cout<<"系统中现有多项式个数为:"<<j<<endl;
}

bool sequelist::findlist(char idata)//查找多项式(提供多项式名称)
{
    int site;
    site=int(idata-'A');
    if(list[site].empty())
        return false;
    else
    {
        display(idata);
        return true;
    }
}

bool sequelist::scanname(char idata)//判断多项式的名称是否合法
{
    if(idata>='A'&&idata<='Z')
    {
        int site;
        site=int(idata-'A');
        if(!list[site].empty())
        {
            cout<<"对不起,多项式"<<idata<<"已经存在!"<<endl;
            display(idata);
            return false;
        }
        else
        {
            cout<<"恭喜!多项式名称通过检验!请继续..."<<endl;
            return true;
        }
    }
    cout<<"对不起,您输入的多项式名称格式不正确!"<<endl;
    return false;
}

/*
定义一个实现多项式功能的菜单处理类interfacebase 
*/
class interfacebase
{
private:
    sequelist listonface;
public:
    void clearscreen(void);//清屏
    void showmenu(void);//显示菜单函数
    int userchoice(void);//用户的选项
    returninfo processmenu(int menuchoice);//菜单函数
};

void interfacebase::clearscreen(void)
{
    system("cls");
}

void interfacebase::showmenu(void)
{
    cout<<"单链表实现多项式的功能菜单"<<endl;
    cout<<"=========================="<<endl;
    cout<<"1.输入多项式(从键盘输入)"<<endl;
    cout<<"2.显示多项式(遍历所有多项式)"<<endl;
    cout<<"3.清空多项式信息"<<endl;
    cout<<"4.赋值计算"<<endl;
    cout<<"5.显示某个多项式"<<endl;
    cout<<"6.显示系统中现存多项式的名称"<<endl;
    cout<<"7.查找多项式(提供多项式名称)"<<endl;
    cout<<"0.退出程序"<<endl;
    cout<<"=========================="<<endl;
}

int interfacebase::userchoice(void)
{
    int menuchoice;
    cout<<"请输入您的选择:";
    cin>>menuchoice;
    return menuchoice;
}

returninfo interfacebase::processmenu(int menuchoice)
{
    int position,item,returnvalue;
    char name;
    switch(menuchoice)//根据用户的选择进行相应的操作
    {
    case 1:
        returnvalue=listonface.inputdata();
        if(returnvalue==fail)
            cout<<"对不起,您输入的多项式名称格式不正确!请按任意键继续..."<<endl;
        else if(returnvalue==wrong)
            cout<<"对不起,该项多项式错误(或者为空),已删除!请按任意键继续..."<<endl;
        else if(returnvalue==empty_error)
            cout<<"对不起,该项多项式为空!请按任意键继续..."<<endl;
        else
            cout<<"输入多项式操作成功!请按任意键继续..."<<endl;
        break;
    case 2:
        listonface.traveral();
        cout<<"多项式遍历操作成功!请按任意键继续..."<<endl;
        break;
    case 3:
        returnvalue=listonface.deletdata();
        if(returnvalue==fail)
            cout<<"操作取消!请按任意键继续..."<<endl;
        else if(returnvalue==wrong)
            cout<<"对不起,该项多项式为空!请按任意键继续..."<<endl;
        else
            cout<<"清除操作成功!请按任意键继续..."<<endl;
        break;
    case 4:
        returnvalue=listonface.calculate();
        if(returnvalue==wrong)
            cout<<"对不起,该项多项式为空!请按任意键继续..."<<endl;
        else if(returnvalue==fail)
            cout<<"操作取消!请按任意键继续..."<<endl;
        else
            cout<<"赋值计算操作成功!请按任意键继续..."<<endl;
        break;
    case 5:
        cout<<"请输入要显示的多项式名称:";
        cin>>name;
        listonface.display(name);
        cout<<"显示某个多项式操作成功!请按任意键继续..."<<endl;
        break;
    case 6:
        listonface.displayname();
        cout<<"显示系统中现存多项式的名称操作成功!请按任意键继续..."<<endl;
        break;
    case 7:
        cout<<"请输入要查找的多项式名称:";
        cin>>name;
        listonface.findlist(name);
        if(true)
            cout<<"查找多项式操作成功!请按任意键继续..."<<endl;
        else
            cout<<"该多项式为空(不存在)!请按任意键继续..."<<endl;
        break;
    case 0:
        exit(0);
    default:
        cout<<"对不起,您输入的功能编号有错!请重新输入!!!"<<endl;
        break;
    }
    return success;
}

/*
程序主入口
*/
void main(void)
{
    int menuchoice;//定义变量,菜单选单项的选择
    interfacebase interfacenow;
    sequelist sequelistnow;
    system("color f0");//修改屏幕的背景色和字的颜色
    interfacenow.clearscreen();//清屏
    while(1)//永真循环
    {
        interfacenow.showmenu();//显示菜单
        menuchoice=interfacenow.userchoice();//获取用户的选择
        interfacenow.processmenu(menuchoice);//处理用户的选择
        system("pause");//暂停
        interfacenow.clearscreen();//清屏
    }
}//主函数结束
c++
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
单链表实现一元多项式相加的问题
-
单链表实现多项式怎么改成循环单链表来实现
-
单链表存储一元多项式
-
一、 创建一个字符单链表,实现对字符的插入、删除、查找、元素个数的统计等基本操作,要求为用户提供选择式菜单?
-
用单链表实现学籍管理系统
-
java数据结构,线性表操作,C(X)=A(X)+B(X)多项式想加
-
用C语言计算一个单链表的长度,单链表的定义如下:要求使用递归,不得出现循环。
-
c语言单链表每次进行查找操作和排序操作的时候程序就闪退
-
用单链表实现集合的交、并、差运算
-
有一个单链表L,假设结点值为整,怎么设计一个尽可能高效的算法将所有值小于0的结点移到所有值大于0的结点前面?
-
单链表中的插入和删除
-
单链表中我想删除一个数据域的值为x的节点编写了这个函数运行出来不能实现这个功能请问为什么?大佬们
-
c++ 单链表 单链表的附加头结点的i等于零吗?
-
顺序存储结构,线性表,单链表
-
单链表做线性表的存储
-
如何正确创建一个单链表(学生表)?
-
链式结构实现任意多项式的相加
-
数据结构:用C++实现两个有序单链表和成一个有序单链表(递归方法)
-
JAVA单链表(多项式)直接插入排序,大家看看我的怎么不行呢
-
Linux文件操作高频使用命令
文章目录0.新建操作:1.查看操作2.删除操作3.复制操作4.移动操作:5.重命名操作:6.解压压缩操作 0.新建操作: mkdir abc #新建一个文件夹 touch abc.sh #新建一个文件 1.查看操作 查看目录: ll #显示目录文件详细信息 查看文件内容: cat|head|tail命令 cat abc.txt #查看abc的内容 head -5 abc.txt #...
程序员实用工具网站
目录 1、搜索引擎 2、PPT 3、图片操作 4、文件共享 5、应届生招聘 6、程序员面试题库 7、办公、开发软件 8、高清图片、视频素材网站 9、项目开源 10、在线工具宝典大全 程序员开发需要具备良好的信息检索能力,为了备忘(收藏夹真是满了),将开发过程中常用的网站进行整理。 1、搜索引擎 1.1、秘迹搜索 一款无敌有良心、无敌安全的搜索引擎,不会收集私人信息,保...
LeetCode解题汇总目录
此篇为LeetCode刷题的汇总目录,方便大家查找,一起刷题,一起PK交流! 已解题目 考点 LeetCode 1. 两数之和(哈希) LeetCode 2. 两数相加(单链表反转) LeetCode 9. 回文数 LeetCode 11. 盛最多水的容器(双指针) LeetCode 15. 三数之和 LeetCode 17. 电话号码的字母组合(回溯...
全球最厉害的 14 位程序员!
来源 | ITWorld 整理自网络全球最厉害的 14 位程序员是谁?今天就让我们一起来了解一下吧,排名不分先后。01. Jon Skeet个人名望:程序技术问答网站 S...
从入门到精通,Java学习路线导航
引言 最近也有很多人来向我"请教",他们大都是一些刚入门的新手,还不了解这个行业,也不知道从何学起,开始的时候非常迷茫,实在是每天回复很多人也很麻烦,所以在这里统一作个回复吧。 Java学习路线 当然,这里我只是说Java学习路线,因为自己就是学Java的,对Java理当很熟悉,对于其它方面,我也不是很了解。 基础阶段 首先是基础阶段,在基础阶段,我们必须掌握Java基础,Mysql数据库,Ora...
二十出头,老气横秋
有的时候,我们希望年轻人成熟一点,不要巨婴,不要总是等着别人来解救,要自立,要有担当。但有时候吧,发现有些年轻人,似乎过于成熟了,二十来岁的人,感觉怎么就老气横秋的。1、...
我花了一夜用数据结构给女朋友写个H5走迷宫游戏
起因 又到深夜了,我按照以往在csdn和公众号写着数据结构!这占用了我大量的时间!我的超越妹妹严重缺乏陪伴而 怨气满满! 而女朋友时常埋怨,认为数据结构这么抽象难懂的东西没啥作用,常会问道:天天写这玩意,有啥作用。而我答道:能干事情多了,比如写个迷宫小游戏啥的! 当我码完字准备睡觉时:写不好别睡觉! 分析 如果用数据结构与算法造出东西来呢? ...
五分钟小知识:为什么说 ++i 的效率比 i++ 高?
点击蓝色“五分钟学算法”关注我哟加个“星标”,天天中午 12:15,一起学算法作者 | 守望先生来源 | 编程珠玑前言不知道你是否听说过 ++i 比 i++ 快的说法,真...
什么是大公司病(太形象了)
点击蓝色“五分钟学算法”关注我哟加个“星标”,天天中午 12:15,一起学算法作者 | 南之鱼来源 | 芝麻观点(chinamkt)所谓大企业病,一般都具有机构臃肿、多重...
代码整洁 vs 代码肮脏
写出整洁的代码,是每个程序员的追求。《clean code》指出,要想写出好的代码,首先得知道什么是肮脏代码、什么是整洁代码;然后通过大量的刻意练习,才能真正写出整洁的代码。 WTF/min是衡量代码质量的唯一标准,Uncle Bob在书中称糟糕的代码为沼泽(wading),这只突出了我们是糟糕代码的受害者。国内有一个更适合的词汇:屎山,虽然不是很文雅但是更加客观,程序员既是受害者也是加害者。 对...
让程序员崩溃的瞬间(非程序员勿入)
今天给大家带来点快乐,程序员才能看懂。 来源:https://zhuanlan.zhihu.com/p/47066521 1. 公司实习生找 Bug 2.在调试时,将断点设置在错误的位置 3.当我有一个很棒的调试想法时 4.偶然间看到自己多年前写的代码 5.当我第一次启动我的单元测试时 ...
Git 天天用 但是 Git 原理你了解吗?
Git 原理 做技术一定要知其然知其所以然,意思就是:知道它是这样的,更知道它为什么是这样的。我主要通过4块内容来简单介绍 Git 是原理是什么样的。这4块内容如下: Git 存储目录结构介绍 Git 是如何存储的 Git 的对象 Git引用 当然 Git 原理不仅仅包含这些,想要更深入了解请查看官方教程 https://git-scm.com/book/zh/v2/。 本文内容是我在 Git...
为什么面向对象糟透了?
又是周末,编程语言“三巨头”Java, Lisp 和C语言在Hello World咖啡馆聚会。服务员送来咖啡的同时还带来了一张今天的报纸, 三人寒暄了几句, C语言翻开了...
Java 每日算法,三个线程按顺序打印
关于多线程的基础知识,可点击下面链接进行学习。 JAVA\Android 多线程实现方式及并发与同步 题目1 启动3个线程A、B、C,使A打印0,然后B打印1,然后C打印2,A打印3,B打印4,C打印5,依次类推。 public class PrintSequenceThread implements Runnable { private static final Ob...
分享靠写代码赚钱的一些门路
作者 mezod,译者 josephchang10如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。今天给大家分享一个精彩...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
技术人员要拿百万年薪,必须要经历这9个段位
很多人都问,技术人员如何成长,每个阶段又是怎样的,如何才能走出当前的迷茫,实现自我的突破。所以我结合我自己10多年的从业经验,总结了技术人员成长的9个段位,希望对大家的职...
8000字干货:那些很厉害的人是怎么构建知识体系的
本文约8000字,正常阅读需要15~20分钟。读完本文可以获得如下收益: 分辨知识和知识体系的差别 理解如何用八大问发现知识的连接点; 掌握致用类知识体系的构建方法; 能够应用甜蜜区模型找到特定领域来构建知识体系。 1. 知识体系?有必要吗? 小张准备通过跑步锻炼身体,可因为之前听说过小腿变粗、膝盖受伤、猝死等等与跑步有关的意外状况,有点担心自己会掉进各种坑里,就在微信上问朋友圈一直晒跑步...
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件
文章目录前言一、nginx简介1. 什么是 nginx 和可以做什么事情2.Nginx 作为 web 服务器3. 正向代理4. 反向代理5. 动静分离6.动静分离二、Nginx 的安装三、 Nginx 的常用命令和配置文件四、 Nginx 配置实例 1 反向代理五、 Nginx 配置实例 2 负载均衡六、 Nginx 配置实例 3 动静分离七、 Nginx 的高可用集群 前言 一、nginx简介...
500行代码,教你用python写个微信飞机大战
这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。 帮助蹲厕族、YP族、饭圈女孩在无聊之余可以有一样东西让他们振作起来!让他们的左手 / 右手有节奏有韵律的朝着同一个方向来回移动起来! 这是史诗级的发明,是浓墨重彩的一笔,是…… 在一阵抽搐后,我结束了游戏,瞬时觉得一切都索然无味,正在我进入贤者模式时,突然想到,如果我可以让更多人已不同的方式体会到这种美轮美奂的感觉岂不美哉? 所以我打开电脑,创建了一个 `plan_game.py`……
2019诺贝尔经济学奖得主:贫穷的本质是什么?
2019年诺贝尔经济学奖,颁给了来自麻省理工学院的 阿巴希·巴纳吉(Abhijit Vinayak Banerjee)、艾丝特·杜芙若(Esther Duflo)夫妇和哈...
相关热词 c#俄罗斯方块源码 c# linq原理 c# 装箱有什么用 c#集合 复制 c# 一个字符串分组 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类