通讯录存储结构是链表形式,类创建的通讯录怎么保存信息到txt文件并读取啊??是C++课设

我的Save和Read函数好像不行
下面是我的完整代码
求求哪位大佬帮我加这两个函数,课设要答辩了,来不及辽!!!!

#include <iostream>
#include <string>
#include <fstream>
#include <string>
using namespace std;

typedef int contacttype;

class contact{
public:
     string name;
     string address;
     string phonenum;
     contact *next;
     contacttype ctype;
     contact(){
        name="0";
        address="0";
        phonenum="0";
        ctype=0;
        next=NULL;
     }
};

//定义联系人结点类

class contactlist{
public:
    contact *head;
    contactlist(){
        head=new contact();
    }
    void Mainscreen(contact *dead);
    void UserReg(contact *head);
    void Login(contact *head);
    void Title();
    void Assert(contact *head);
    void Search(contact *head);
    void Delete(contact *head);
    void Change(contact *head);
    void Show(contact *head);
                void TypeShow(contact *head);
               friend void typeshow(contact *head,int choice);
    void Save(contact *head);
    void Read(contact *head);
};//定义联系人链表类


void contactlist::UserReg(contact *head)
{
    system("cls");                             
    FILE *fp;                                  
    char Linedata[50]={0},User[20],Pass[20];   
    fp = fopen("data.dat","at");             
    cout<<"******欢迎进入新账号注册新账号注册:******"<<endl;         
    cout<<"请输入用户名:";       
    fflush(stdin);                           
    gets(User);                                 
    cout<<"请输入密码:";
    fflush(stdin);                             
    gets(Pass);                                 
    strcpy(Linedata,User);                     
    strcat(Linedata,",");
    strcat(Linedata,Pass);
    strcat(Linedata,"\n");
    fputs(Linedata,fp);                        
    fclose(fp);                                
    cout<<"注册成功!"<<endl;
    system("pause");
    system("cls");
    Title();
    cout<<"等待转入登陆界面………………"<<endl;
    Login(head);
 }



void contactlist::Login(contact *head)//登陆
{
    FILE *fp;                                   
    int find=0;
    char User[20],Pass[20],Userstrcat[50]={0}; 
    char c,Userdata[50]={0};                     
    fp = fopen("data.dat","r");              
    cout<<"用户登录:"<<endl;
    cout<<"请输入用户名:";        
    fflush(stdin);                                
    gets(User);                               
    cout<<"请输入密码:";
    fflush(stdin);                                
    gets(Pass);                                    
    strcpy(Userstrcat,User);                      
    strcat(Userstrcat,",");
    strcat(Userstrcat,Pass);
    strcat(Userstrcat,"\n");
     while (!feof(fp))                             
     {
          fgets(Userdata,19,fp);
          if (strcmp(Userdata,Userstrcat)==0 )   
          {
              cout<<"登录成功!"<<endl;     
              find=1;      
                            Read(head);   //登陆成功后读取文件信息,保存在head链表里
                    system("cls");
                   Title();
              Mainscreen(head);                          
     }
    fclose(fp);                                        
    if (!find)                                          
    { 
       cout<<"用户名不存在或密码错误"<<endl; 
       cout<<"请选择重新登陆(按数字1)或者注册新账号(按数字2):";
       cin>>c;
       if(c=='1')  Login(head);
       else if(c=='2') contactlist::UserReg(head);
    }
}



void contactlist::Save(contact *head)
{
    FILE *fp;
    contact *point;
    point=head;
    fp=fopen("G:\\temp - 副本2\\lin.txt","wb+");
    if(fp==NULL)
    {
        cout<<"can not open file"<<endl;
        exit(0);
    }
    else{
       while (point)
       {

          fwrite(point, sizeof(class contact),1, fp);
          point=point->next;
       } 
       }
    fclose(fp);
}

/*
void contactlist::Read(contact *head)         
{
    FILE *p=fopen("G:\\temp - 副本2\\lin.txt","rb");
    fread(head,sizeof(class contact),1,p);
    while(head->next){
        head=head->next;
        fread(head,sizeof(class contact),1,p);
}
*/

void contactlist::Assert(contact *head)
{ 
  system("cls");
  Title();
  contact *p,*q;
  /*
  if(head->next==NULL)
  { 
     p=new contact();

     cout<<"当前通讯录为空,请输入第一个记录的联系人姓名:";
     cin>>p->name;
     cout<<"请输入联系人的家庭住址:";
     cin>>p->address;
     cout<<"请输入联系人的手机号码:";
     cin>>p->phonenum;
     cout<<"1:朋友"<<endl;
     cout<<"2:同学"<<endl;
     cout<<"3:亲戚"<<endl;
     cout<<"4:同事"<<endl;
     cout<<"请选择联系人的分组:";
     cin>>p->ctype;
     head->next=p;
     p->next=NULL;
     system("cls");
     Title();
  }
   else if(head->next!=NULL)
   { */
      q=new contact;
      q=head;
      p=new contact;
      cout<<"请输入联系人的姓名:";
      cin>>p->name;
      cout<<"请输入联系人的家庭住址:";
      cin>>p->address;
      cout<<"请输入联系人的手机号码:";
      cin>>p->phonenum;
      cout<<"联系人分类:"<<endl;
      cout<<"1:朋友"<<endl;
      cout<<"2:同学"<<endl;
      cout<<"3:亲戚"<<endl;
      cout<<"4:同事"<<endl;
      cout<<"请选择联系人的分组:";
      cin>>p->ctype;
      p->next=q->next;
      q->next=p;
      system("cls");
      Title();
//}
   contactlist::Mainscreen(head);
}



void contactlist::Delete(contact *head)
{ 
    int flag=1;
    system("cls");
    char de_con[10];
    cout<<"请输入要删除记录的联系人姓名:";
    cin>>de_con;
    contact *q,*front;//
    front=new contact;
    q=head;
    while((q->next)!=NULL)
    {   
        char Name[20];
        strcpy(Name, (q->next->name).c_str());
        if(strcmp(de_con,Name)==0)
        { 
             cout<<"已找到需要注销的记录,正在注销中…………"<<endl;
             q->next=q->next->next;
             cout<<"该数据已注销成功,返回主页面…………"<<endl;
             flag=0;
             break;
        }
        q=q->next;
    }
    if(flag==1)
    cout<<"要删除的记录不存在"<<endl;
    contactlist::Mainscreen(head);
}


void contactlist::Change(contact *head)
{
    system("cls");
    Title();
    int flag=1;
    contact *q;
    char name_con[10];
    cout<<"请输入你要修改记录的联系人姓名:";
    cin>>name_con;
    q=head->next;
    while(q!=NULL)
    { char Name[20];
        strcpy(Name, (q->name).c_str());
        if(strcmp(Name,name_con)==0)
        { 

            cout<<"请开始记录的修改:"<<endl;
            cout<<"姓名:";
            cin>>q->name;
            cout<<"家庭住址:";
            cin>>q->address;
            cout<<"电话号码:";
            cin>>q->phonenum;
            cout<<"联系人分组:";
            cout<<"1:朋友"<<endl;
            cout<<"2:同学"<<endl;
            cout<<"3:亲戚"<<endl;
            cout<<"4:同事"<<endl;
            cout<<"请选择联系人的类型:";
            cin>>q->ctype;
            cout<<"个人信息修改完成!"<<endl;
            flag=0;
            break;
        }
        q=q->next;
    }
    if(flag==1)
    cout<<"查找的记录不存在"<<endl;
    contactlist::Mainscreen(head);
}


void contactlist::Search(contact *head)
{
    system("cls");
    Title();
    int flag=1;
    char name_con[10];
    cout<<"请输入你要查找记录的联系人姓名:";
    cin>>name_con;
    contact *q;
    q=head->next;
    while(q!=NULL)
    {char Name[20];
        strcpy(Name, (q->name).c_str());
        if(strcmp(Name,name_con)==0)
        { 
            cout<<"姓名:"<<"       ";
            cout<<"家庭住址:"<<"       ";
            cout<<"电话号码:"<<"       ";
            cout<<"联系人分组:"<<"         "<<endl; 
            cout<<q->name<<"         ";
            cout<<q->address<<"            ";
            cout<<q->phonenum<<"           ";
            switch(q->ctype){
            case 1:cout<<"朋友           "<<endl;break;
            case 2:cout<<"同学           "<<endl;break;
            case 3:cout<<"亲戚           "<<endl;break;
            case 4:cout<<"同事           "<<endl;break;
            }
            flag=0;
            break;
        }
         q=q->next;
    }
     if(flag==1)
     cout<<"查找的记录不存在"<<endl;
     contactlist::Mainscreen(head);
}



void contactlist::Show(contact *head)
{
     system("cls");
     Title();
     if(head->next==NULL) 
     {
         cout<<"通讯录为空,请选择操作1插入联系人"<<endl;
         contactlist::Mainscreen(head);
     }
     else
     {
         contact *q;
         q=head->next;
         cout<<"姓名:"<<"      ";
         cout<<"家庭住址:"<<"     ";
         cout<<"电话号码:"<<"     ";
         cout<<"分组:"<<endl;
         while(q!=NULL)
         {
              cout<<q->name<<"          ";
              cout<<q->address<<"           ";
              cout<<q->phonenum<<"           ";
              switch(q->ctype){
              case 1:cout<<"朋友           "<<endl;break;
              case 2:cout<<"同学           "<<endl;break;
              case 3:cout<<"亲戚           "<<endl;break;
              case 4:cout<<"同事           "<<endl;break;
              }
              q=q->next;
         }
         contactlist::Mainscreen(head);
     }
}

void typeshow(contact *head,int choice)
{
    contact *p;
    p=head->next;
    int flag=0;
    while(p!=NULL){
        if(p->ctype==choice){
              cout<<"姓名:"<<"       ";
              cout<<"家庭住址:"<<"      ";
              cout<<"电话号码:"<<"      "<<endl;
              cout<<p->name<<"          ";
              cout<<p->address<<"           ";
              cout<<p->phonenum<<"        "<<endl;
              flag=1;
        }
        p=p->next;
    }
    if(!flag) cout<<"该分组没有记录!"<<endl;
}



void contactlist::TypeShow(contact *head)
{
     system("cls");
     Title();
     if(head->next==NULL) 
     {
         cout<<"通讯录为空,请选择操作1添加记录或6退出系统"<<endl;
         contactlist::Mainscreen(head);
     }
     else
     {
         int choice;
         cout<<"输出所有朋友的记录----------------1"<<endl;
         cout<<"输出所有同学的记录----------------2"<<endl;
         cout<<"输出所有亲戚的记录----------------3"<<endl;
         cout<<"输出所有同事的记录----------------4"<<endl;
         cout<<"请选择:";
         cin>>choice;
         typeshow(head,choice);
         contactlist::Mainscreen(head);
     }
}


void contactlist::Mainscreen(contact *head)
{
     int choice;
     char a='*';
     cout<<endl;
     cout<<" "<<"按照信息后的数字提示选择相应的操作:"<<endl;
     for(int i=0;i<34;i++)
     cout<<a<<" ";
     cout<<endl;
     cout<<a<<"  添加新的记录----------------------------------------------  1  "<<a<<endl;
     cout<<a<<"  根据姓名查找相应的记录------------------------------------  2  "<<a<<endl;
     cout<<a<<"  根据姓名删除相应的记录------------------------------------  3  "<<a<<endl;
     cout<<a<<"  根据姓名修改相应的记录------------------------------------  4  "<<a<<endl;
     cout<<a<<"  显示当前数据库中所有的记录--------------------------------  5  "<<a<<endl;
     cout<<a<<"  显示同一分组的记录----------------------------------------  6  "<<a<<endl;
     cout<<a<<"  退出通讯录管理系统----------------------------------------  7  "<<a<<endl;
     for(i=0;i<34;i++)
     cout<<a<<" ";  
     cout<<endl;
     cout<<"请输入你的选择:";
     cin>>choice;
     switch(choice)
     {
          case 1:contactlist::Assert(head);break;
          case 2:contactlist::Search(head);break;
          case 3:contactlist::Delete(head);break;
          case 4:contactlist::Change(head);break;
          case 5:contactlist::Show(head);break;
          case 6:contactlist::TypeShow(head);break;
          case 7:system("cls");Save(head);exit(0);
     }
}

void contactlist::Title()
{
    char a='*';
    for(int i=0;i<120;i++)
    cout<<a;
    cout<<endl;
    cout<<"                                                通讯录管理系统"<<endl;
    cout<<endl;
    for(i=0;i<120;i++)
    cout<<a;
    cout<<endl;
}




int main()
{
    contactlist *s=new contactlist();
    s->Title();
    cout<<"欢迎进入通讯录管理系统,请选择登陆方式:"<<endl;
    int selectNum;
    cout<<"1 注册新账户"<<endl;//输出一个选择菜单
    cout<<"2 已有的账户登录"<<endl;
    cout<<"3 退出通讯录管理系统"<<endl;
    cin>>selectNum;      
    switch (selectNum)        
    {
          case 1:s->UserReg(s->head);break;        
          case 2:s->Login(s->head);  break;         
          case 3:system("cls");Save(head);exit(0); break;   //退出之前,把改过的通讯录重新读入文档
    }
    return 0;
}
c++
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
通讯录存储结构是链表形式,类创建的通讯录怎么保存信息到txt文件并读取啊??是C++课设

我的Save和Read函数好像不行 下面是我的完整代码 求求哪位大佬帮我加这两个函数,课设要答辩了,来不及辽!!!! ``` #include <iostream> #include <string> #include <fstream> #include <string> using namespace std; typedef int contacttype; class contact{ public: string name; string address; string phonenum; contact *next; contacttype ctype; contact(){ name="0"; address="0"; phonenum="0"; ctype=0; next=NULL; } }; //定义联系人结点类 class contactlist{ public: contact *head; contactlist(){ head=new contact(); } void Mainscreen(contact *dead); void UserReg(contact *head); void Login(contact *head); void Title(); void Assert(contact *head); void Search(contact *head); void Delete(contact *head); void Change(contact *head); void Show(contact *head); void TypeShow(contact *head); friend void typeshow(contact *head,int choice); void Save(contact *head); void Read(contact *head); };//定义联系人链表类 void contactlist::UserReg(contact *head) { system("cls"); FILE *fp; char Linedata[50]={0},User[20],Pass[20]; fp = fopen("data.dat","at"); cout<<"******欢迎进入新账号注册新账号注册:******"<<endl; cout<<"请输入用户名:"; fflush(stdin); gets(User); cout<<"请输入密码:"; fflush(stdin); gets(Pass); strcpy(Linedata,User); strcat(Linedata,","); strcat(Linedata,Pass); strcat(Linedata,"\n"); fputs(Linedata,fp); fclose(fp); cout<<"注册成功!"<<endl; system("pause"); system("cls"); Title(); cout<<"等待转入登陆界面………………"<<endl; Login(head); } void contactlist::Login(contact *head)//登陆 { FILE *fp; int find=0; char User[20],Pass[20],Userstrcat[50]={0}; char c,Userdata[50]={0}; fp = fopen("data.dat","r"); cout<<"用户登录:"<<endl; cout<<"请输入用户名:"; fflush(stdin); gets(User); cout<<"请输入密码:"; fflush(stdin); gets(Pass); strcpy(Userstrcat,User); strcat(Userstrcat,","); strcat(Userstrcat,Pass); strcat(Userstrcat,"\n"); while (!feof(fp)) { fgets(Userdata,19,fp); if (strcmp(Userdata,Userstrcat)==0 ) { cout<<"登录成功!"<<endl; find=1; Read(head); //登陆成功后读取文件信息,保存在head链表里 system("cls"); Title(); Mainscreen(head); } fclose(fp); if (!find) { cout<<"用户名不存在或密码错误"<<endl; cout<<"请选择重新登陆(按数字1)或者注册新账号(按数字2):"; cin>>c; if(c=='1') Login(head); else if(c=='2') contactlist::UserReg(head); } } void contactlist::Save(contact *head) { FILE *fp; contact *point; point=head; fp=fopen("G:\\temp - 副本2\\lin.txt","wb+"); if(fp==NULL) { cout<<"can not open file"<<endl; exit(0); } else{ while (point) { fwrite(point, sizeof(class contact),1, fp); point=point->next; } } fclose(fp); } /* void contactlist::Read(contact *head) { FILE *p=fopen("G:\\temp - 副本2\\lin.txt","rb"); fread(head,sizeof(class contact),1,p); while(head->next){ head=head->next; fread(head,sizeof(class contact),1,p); } */ void contactlist::Assert(contact *head) { system("cls"); Title(); contact *p,*q; /* if(head->next==NULL) { p=new contact(); cout<<"当前通讯录为空,请输入第一个记录的联系人姓名:"; cin>>p->name; cout<<"请输入联系人的家庭住址:"; cin>>p->address; cout<<"请输入联系人的手机号码:"; cin>>p->phonenum; cout<<"1:朋友"<<endl; cout<<"2:同学"<<endl; cout<<"3:亲戚"<<endl; cout<<"4:同事"<<endl; cout<<"请选择联系人的分组:"; cin>>p->ctype; head->next=p; p->next=NULL; system("cls"); Title(); } else if(head->next!=NULL) { */ q=new contact; q=head; p=new contact; cout<<"请输入联系人的姓名:"; cin>>p->name; cout<<"请输入联系人的家庭住址:"; cin>>p->address; cout<<"请输入联系人的手机号码:"; cin>>p->phonenum; cout<<"联系人分类:"<<endl; cout<<"1:朋友"<<endl; cout<<"2:同学"<<endl; cout<<"3:亲戚"<<endl; cout<<"4:同事"<<endl; cout<<"请选择联系人的分组:"; cin>>p->ctype; p->next=q->next; q->next=p; system("cls"); Title(); //} contactlist::Mainscreen(head); } void contactlist::Delete(contact *head) { int flag=1; system("cls"); char de_con[10]; cout<<"请输入要删除记录的联系人姓名:"; cin>>de_con; contact *q,*front;// front=new contact; q=head; while((q->next)!=NULL) { char Name[20]; strcpy(Name, (q->next->name).c_str()); if(strcmp(de_con,Name)==0) { cout<<"已找到需要注销的记录,正在注销中…………"<<endl; q->next=q->next->next; cout<<"该数据已注销成功,返回主页面…………"<<endl; flag=0; break; } q=q->next; } if(flag==1) cout<<"要删除的记录不存在"<<endl; contactlist::Mainscreen(head); } void contactlist::Change(contact *head) { system("cls"); Title(); int flag=1; contact *q; char name_con[10]; cout<<"请输入你要修改记录的联系人姓名:"; cin>>name_con; q=head->next; while(q!=NULL) { char Name[20]; strcpy(Name, (q->name).c_str()); if(strcmp(Name,name_con)==0) { cout<<"请开始记录的修改:"<<endl; cout<<"姓名:"; cin>>q->name; cout<<"家庭住址:"; cin>>q->address; cout<<"电话号码:"; cin>>q->phonenum; cout<<"联系人分组:"; cout<<"1:朋友"<<endl; cout<<"2:同学"<<endl; cout<<"3:亲戚"<<endl; cout<<"4:同事"<<endl; cout<<"请选择联系人的类型:"; cin>>q->ctype; cout<<"个人信息修改完成!"<<endl; flag=0; break; } q=q->next; } if(flag==1) cout<<"查找的记录不存在"<<endl; contactlist::Mainscreen(head); } void contactlist::Search(contact *head) { system("cls"); Title(); int flag=1; char name_con[10]; cout<<"请输入你要查找记录的联系人姓名:"; cin>>name_con; contact *q; q=head->next; while(q!=NULL) {char Name[20]; strcpy(Name, (q->name).c_str()); if(strcmp(Name,name_con)==0) { cout<<"姓名:"<<" "; cout<<"家庭住址:"<<" "; cout<<"电话号码:"<<" "; cout<<"联系人分组:"<<" "<<endl; cout<<q->name<<" "; cout<<q->address<<" "; cout<<q->phonenum<<" "; switch(q->ctype){ case 1:cout<<"朋友 "<<endl;break; case 2:cout<<"同学 "<<endl;break; case 3:cout<<"亲戚 "<<endl;break; case 4:cout<<"同事 "<<endl;break; } flag=0; break; } q=q->next; } if(flag==1) cout<<"查找的记录不存在"<<endl; contactlist::Mainscreen(head); } void contactlist::Show(contact *head) { system("cls"); Title(); if(head->next==NULL) { cout<<"通讯录为空,请选择操作1插入联系人"<<endl; contactlist::Mainscreen(head); } else { contact *q; q=head->next; cout<<"姓名:"<<" "; cout<<"家庭住址:"<<" "; cout<<"电话号码:"<<" "; cout<<"分组:"<<endl; while(q!=NULL) { cout<<q->name<<" "; cout<<q->address<<" "; cout<<q->phonenum<<" "; switch(q->ctype){ case 1:cout<<"朋友 "<<endl;break; case 2:cout<<"同学 "<<endl;break; case 3:cout<<"亲戚 "<<endl;break; case 4:cout<<"同事 "<<endl;break; } q=q->next; } contactlist::Mainscreen(head); } } void typeshow(contact *head,int choice) { contact *p; p=head->next; int flag=0; while(p!=NULL){ if(p->ctype==choice){ cout<<"姓名:"<<" "; cout<<"家庭住址:"<<" "; cout<<"电话号码:"<<" "<<endl; cout<<p->name<<" "; cout<<p->address<<" "; cout<<p->phonenum<<" "<<endl; flag=1; } p=p->next; } if(!flag) cout<<"该分组没有记录!"<<endl; } void contactlist::TypeShow(contact *head) { system("cls"); Title(); if(head->next==NULL) { cout<<"通讯录为空,请选择操作1添加记录或6退出系统"<<endl; contactlist::Mainscreen(head); } else { int choice; cout<<"输出所有朋友的记录----------------1"<<endl; cout<<"输出所有同学的记录----------------2"<<endl; cout<<"输出所有亲戚的记录----------------3"<<endl; cout<<"输出所有同事的记录----------------4"<<endl; cout<<"请选择:"; cin>>choice; typeshow(head,choice); contactlist::Mainscreen(head); } } void contactlist::Mainscreen(contact *head) { int choice; char a='*'; cout<<endl; cout<<" "<<"按照信息后的数字提示选择相应的操作:"<<endl; for(int i=0;i<34;i++) cout<<a<<" "; cout<<endl; cout<<a<<" 添加新的记录---------------------------------------------- 1 "<<a<<endl; cout<<a<<" 根据姓名查找相应的记录------------------------------------ 2 "<<a<<endl; cout<<a<<" 根据姓名删除相应的记录------------------------------------ 3 "<<a<<endl; cout<<a<<" 根据姓名修改相应的记录------------------------------------ 4 "<<a<<endl; cout<<a<<" 显示当前数据库中所有的记录-------------------------------- 5 "<<a<<endl; cout<<a<<" 显示同一分组的记录---------------------------------------- 6 "<<a<<endl; cout<<a<<" 退出通讯录管理系统---------------------------------------- 7 "<<a<<endl; for(i=0;i<34;i++) cout<<a<<" "; cout<<endl; cout<<"请输入你的选择:"; cin>>choice; switch(choice) { case 1:contactlist::Assert(head);break; case 2:contactlist::Search(head);break; case 3:contactlist::Delete(head);break; case 4:contactlist::Change(head);break; case 5:contactlist::Show(head);break; case 6:contactlist::TypeShow(head);break; case 7:system("cls");Save(head);exit(0); } } void contactlist::Title() { char a='*'; for(int i=0;i<120;i++) cout<<a; cout<<endl; cout<<" 通讯录管理系统"<<endl; cout<<endl; for(i=0;i<120;i++) cout<<a; cout<<endl; } int main() { contactlist *s=new contactlist(); s->Title(); cout<<"欢迎进入通讯录管理系统,请选择登陆方式:"<<endl; int selectNum; cout<<"1 注册新账户"<<endl;//输出一个选择菜单 cout<<"2 已有的账户登录"<<endl; cout<<"3 退出通讯录管理系统"<<endl; cin>>selectNum; switch (selectNum) { case 1:s->UserReg(s->head);break; case 2:s->Login(s->head); break; case 3:system("cls");Save(head);exit(0); break; //退出之前,把改过的通讯录重新读入文档 } return 0; } ```

C语言写通讯录用数组好还是链表好?

C语言写通讯录,需要每次打开有数据,需要保存数据,删除,添加,修改..... 用链表是不是还要每次打开后读取文件数据到链表中,感觉太麻烦,到底用数组好还是链表更合适?如果用链表,如何实现链表数据的保存和读取?

静态链表的存储结构到底是顺序存储结构还是链式存储结构?求各位赐教

[size=16px]]刚开始学数据结构,对于静态链表的存储结构书上也没有明确给出。以下是个人理解: 既然静态链表就是结构体数组,那数组肯定是顺序存储结构,所以静态链表整体上应该是顺序存储结构。但静态链表存储的数据从物理结构上来说并不连续,而是通过游标来寻找下一个要访问的数组的下标的,具有链式存储结构的优点。所以很纠结静态链表到底是链式存储结构还是顺序存储结构?[/size]

类,求大神,如何用类创建一个学生链表

如何用类创建一个学生链表,可实现插入,删除,查找等功能,,!,,,,,,,,,,,,,

顺序表、链表和数组是逻辑结构还是物理(存储)结构?或者这两种结构都有描述?

数据结构中的线性结构也就是“线性表”是逻辑结构,现在可以肯定栈与队列都是存储结构,栈与队列都是线性表,顺序表和链表也是线性表,一维数组和顺序表又基本上是一回事,那么顺序表和链表也是存储结构吗? 主要是在网上看了很多人的回答,各种说法都有,所以想确认一下。

数据结构java实验四验证教材中树结构的基本操作,设计实现指定操作的算法,并做算法分析。 以下各题二叉树的存储结构是二叉链表表示,方法声明如下: 二叉树的二叉链表结点类:

二叉树的二叉链表结点类 public class BinaryNode<T> { T data; //数据元素 BinaryNode<T> left, right; //左、右孩子 public BinaryNode(T data, BinaryNode<T> left, BinaryNode<T> right) //构造结点 public BinaryNode(T data) //构造叶子 public String toString() //描述字符串 public boolean isLeaf() //判叶子结点 } 二叉树类: public class BinaryTree<T> { BinaryNode<T> root; //根结点 public BinaryTree() //构造空树 public boolean isEmpty() //判空 } (1) 求一棵BinaryTree<int>二叉树中各结点数值的平均值。 (2) 将每个结点的左子树与右子树交换。 (3) 验证二叉树的性质3。

通讯录中TXT文件读取问题

``` package in; import java.awt.Container; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.WindowConstants; public class Demo extends JFrame { /* * 界面设计 * */ public Demo(){ Container c = getContentPane(); //定义一个顶级容器c setAlwaysOnTop(true); //窗体置顶 JPanel jp = new JPanel(); //新建JPanel面板--jp JButton button1 = new JButton("新建联系人"); JButton button2 = new JButton("删除联系人"); JButton button3 = new JButton("编辑联系人"); JButton button4 = new JButton("查找联系人"); JButton button5 = new JButton("显示所有联系人"); JButton button6 = new JButton("保存联系人到本地"); JButton button7 = new JButton("读取本地联系人"); jp.setLayout(new GridLayout(3,4,5,5));//新建网格布局管理器(行数,列数,组件间的水平垂直间距) jp.add(button1); jp.add(button2); jp.add(button3); jp.add(button4); jp.add(button5); jp.add(button6); jp.add(button7); c.add(jp);//将JPanel面板jp添加到顶级容器c中 setSize(600,150); setTitle("*通 讯 录 管 理 系 统*"); setVisible(true); setResizable(false);//窗体大小由程序员决定,用户不能自由改变大小 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); /* *按键响应 * * */ button1.addActionListener(new ActionListener(){//添加功能实现 public void actionPerformed(ActionEvent arg0){ Infro.addFunction(); } }); button2.addActionListener(new ActionListener(){//删除功能实现 public void actionPerformed(ActionEvent arg0){ Infro.deleteFunction(); } }); button3.addActionListener(new ActionListener(){//修改功能实现 public void actionPerformed(ActionEvent arg0){ Infro.reditFunction(); } }); button4.addActionListener(new ActionListener(){//查询功能实现 public void actionPerformed(ActionEvent arg0){ try { Infro.searchFunction(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); button5.addActionListener(new ActionListener(){//显示功能实现 public void actionPerformed(ActionEvent arg0){ Infro.showFunction(); } }); button6.addActionListener(new ActionListener(){//保存功能实现 public void actionPerformed(ActionEvent arg0){ try { Infro.writeFunction(); } catch (IOException e) { e.printStackTrace(); } } }); button7.addActionListener(new ActionListener(){//读取功能实现 public void actionPerformed(ActionEvent arg0){ try { Infro.readFunction(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } public static void main(String[] args) { // TODO Auto-generated method stub new Demo(); Infro a = new Infro("", "", "", "", "", ""); } } package in; import java.applet.Applet; import java.awt.Graphics; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.StringWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; import javax.swing.JPanel; class Infro { public String Name; public String Sex; public String Unit; public String Homephone; public String Telephone; public String E_mail; static int index = 0; static ArrayList<Infro> list = new ArrayList(); static int len = list.size(); //构造函数 public Infro(String Name,String Sex,String Unit,String Homephone,String Telephone,String E_mail){ this.Name = Name; this.Sex = Sex; this.Unit = Unit; this.Homephone = Homephone; this.Telephone = Telephone; this.E_mail = E_mail; } public String toString(){ return "姓名:"+Name+"\t性别:"+Sex+"\t单位:"+Unit+"\t住宅电话:"+Homephone +"\t移动电话:"+Telephone+"\tE_mail:"+E_mail; } /* * 添加功能 * */ public static void addFunction(){//添加功能 Infro infro = new Infro("","","","","",""); System.out.println("请输入添加的数据:"); Scanner in = new Scanner(System.in); System.out.println("输入姓名:"); infro.Name = in.next(); System.out.println("输入性别:"); infro.Sex = in.next(); System.out.println("输入单位:"); infro.Unit = in.next(); System.out.println("输入住宅电话:"); infro.Homephone = in.next(); System. out.println("输入移动电话:"); infro.Telephone = in.next(); System.out.println("输入E_mail:"); infro.E_mail = in.next(); list.add(index,infro); index++; if(list.isEmpty()){ System.out.println("数据添加失败啦"); }else{ System.out.println("数据添加成功啦"); len++;//list集合长度加一 // System.out.println(list.get(0).toString()); } System.out.println("是否继续添加?1.是 2.否"); Scanner e=new Scanner(System.in); int e1=e.nextInt(); if(e1==1){ Infro.addFunction(); }else{ return; } } /* * 删除功能 * */ public static void deleteFunction(){ System.out.println("输入要删除的联系人的姓名"); Scanner in_2 = new Scanner(System.in); String d1 = in_2.nextLine(); java.util.Iterator<Infro> it = list.iterator(); while (it.hasNext()){ Infro infro = it.next(); if (infro.Name.equals(d1)){ it.remove(); --index;//一定要加这个,否则当做了删除操作再做添加操作的时候会出现异常(类似于指针,栈) System.out.println("删除完毕"+"此时通讯录记录条数为:" + --len); } } System.out.println("是否继续删除?1.是 2.否"); Scanner e=new Scanner(System.in); int e1=e.nextInt(); if(e1==1){ Infro.deleteFunction(); }else{ return; } } /* * 修改功能 * */ public static void reditFunction(){ System.out.println("输入要修改的通讯录的姓名"); Scanner in_r = new Scanner(System.in); String r1 = in_r.nextLine(); for(int a = 0; a < len;a++){ if(r1.equals(list.get(a).Name)){ System.out.println("输入修改后的性别:"); String Sex_1 = in_r.next(); list.get(a).Sex = Sex_1; System.out.println("输入修改后的单位:"); String Unit_1 = in_r.next(); list.get(a).Unit = Unit_1; System.out.println("输入修改后的住宅电话:"); String Homephone_1 = in_r.next(); list.get(a).Homephone = Homephone_1; System.out.println("输入修改后的移动电话:"); String Telephone_1 = in_r.next(); list.get(a).Telephone = Telephone_1; System.out.println("输入修改后的E_mail:"); String E_mail_1 = in_r.next(); list.get(a).E_mail = E_mail_1; System.out.println("数据修改完毕"); } } System.out.println("是否继续修改?1.是 2.否"); Scanner e=new Scanner(System.in); int e1=e.nextInt(); if(e1==1){ Infro.reditFunction(); }else{ return; } } /* * 查询功能 * */ public static void searchFunction() throws Exception{//查询功能 System.out.println("请选择查询方式: "); System.out.println("1.姓名 2.性别 3.单位 4.住宅电话 5.移动电话 6.E_mail "); Scanner in_0=new Scanner(System.in); int s0=in_0.nextInt(); if(s0==1){ System.out.println("请输入要查询的姓名:"); Scanner in_1 = new Scanner(System.in); String s1=in_1.nextLine(); for(int a= 0; a<len;a++){//切记,,这里不能用a<=list.size(),否则会数组越界异常 if(s1.equals(list.get(a).Name)){ System.out.println(list.get(a).toString()); } } } else if(s0==2){ System.out.println("请输入要查询的性别:"); Scanner in_2 = new Scanner(System.in); String s2=in_2.nextLine(); for(int a= 0; a<len;a++){//切记,,这里不能用a<=list.size(),否则会数组越界异常 if(s2.equals(list.get(a).Sex)){ System.out.println(list.get(a).toString()); } } } else if(s0==3){ System.out.println("请输入要查询的单位:"); Scanner in_3 = new Scanner(System.in); String s3=in_3.nextLine(); for(int a= 0; a<len;a++){//切记,,这里不能用a<=list.size(),否则会数组越界异常 if(s3.equals(list.get(a).Unit)){ System.out.println(list.get(a).toString()); } } } if(s0==4){ System.out.println("请输入要查询的住宅电话:"); Scanner in_4 = new Scanner(System.in); String s4=in_4.nextLine(); for(int a= 0; a<len;a++){//切记,,这里不能用a<=list.size(),否则会数组越界异常 if(s4.equals(list.get(a).Homephone)){ System.out.println(list.get(a).toString()); } } } else if(s0==5){ System.out.println("请输入要查询的移动电话:"); Scanner in_5 = new Scanner(System.in); String s5=in_5.nextLine(); for(int a= 0; a<len;a++){//切记,,这里不能用a<=list.size(),否则会数组越界异常 if(s5.equals(list.get(a).Telephone)){ System.out.println(list.get(a).toString()); } } } else if(s0==6){ System.out.println("请输入要查询的E_mail:"); Scanner in_6 = new Scanner(System.in); String s6=in_6.nextLine(); for(int a= 0; a<len;a++){//切记,,这里不能用a<=list.size(),否则会数组越界异常 if(s6.equals(list.get(a).E_mail)){ System.out.println(list.get(a).toString()); } } } } /* * 显示功能 * */ public static void showFunction(){ for(int i = 0 ;i<len;i++){ System.out.println(list.get(i).toString()); } } /* * 保存功能 * */ public static void writeFunction() throws IOException{ FileWriter writer = new FileWriter("通讯录管理.txt"); for(int i = 0 ;i<len;i++){ String []strwriter = new String[len]; strwriter[i]=list.get(i).toString(); writer.write(strwriter[i]); writer.write("\r\n"); System.out.println("成功写入一行数据到 通讯录管理.txt 中"); } writer.close();//关闭写入流,释放资源 } /* * 读取功能 * */ public static void readFunction() throws IOException{ FileReader reader = new FileReader("通讯录管理.txt"); BufferedReader br = new BufferedReader(reader); String str; while((str = br.readLine()) != null){//每次读取一行文本,判断是否到达文件尾 System.out.println(str); } br.close(); } } ``` 课程设计中遇到了问题… 在运行时输入,可以查询,编辑等操作。可是保存到本地后退出运行,第二次再运行时读取本地联系人,就没办法执行查询操作了。我改了好久还是不行,请各位哥哥姐姐帮忙看一下,拜托~因为还没有学数据库,只能用文件了。 超过20个分屏显示就不要了,因为貌似java没有分屏显示……其他的功能,按姓名排序也希望你们能给些思路,谢谢谢谢 这是题目: 3. 以本班同学的具体数据为背景,设计一个本班同学通讯录(3人) 通讯录要求存储姓名、性别、单位、住宅电话、移动电话、E-mail地址等内容。系统功能要求如下: (1)通讯录记录按姓名排序存放,显示时每屏不超过20个记录,超过时分屏显示。 (2)增加某人的通讯录。 (3)修改某人的通讯录。 (4)删除某人的通讯录。 (5)按多种方式查询符合条件的信息。

用java如何创建一个链表

用java如何创建一个链表,当前节点之前一个节点怎么表示,如果不可以表示的话那么怎么用插入的节点和其他节点比较

NSSet,NSDictionary,是属于链表结构存储的数据吗

大家早上好!问各路大神一个问题: NSSet,NSDictionary,是属于链表结构存储的数据吗? NSArray,NSOrderSet是属于顺序结构存储的数据吗

C语言(数据结构)链表创建问题

#include<stdio.h> #include<stdlib.h>//含malloc.h #define LEN sizeof( Faction) //一元多项式结构体 typedef struct Faction{ int coefficient;//系数 int exponent;//指数 struct Faction *next; }Faction; //创建链表 Faction *creat() { Faction *head, *p1, *p2; head = NULL; p1 = p2 = (Faction*)malloc(LEN); scanf("d% d%", &(p1->coefficient), &(p1->exponent)); p1->next = NULL; while(p1->coefficient != -1 || p1->exponent != -1) { if(head == NULL) head = p1; else p2->next = p1; p2 = p1; p1 = (Faction*)malloc(LEN); scanf("d% d%", &(p1->coefficient), &(p1->exponent)); } p2->next = NULL; return head; } //输出链表 void Print(Faction *head) { Faction *p; p = head; while(head != NULL) { printf("d% d%", p->coefficient, p->exponent); p = p->next; } } // int main() { Faction *head; head = NULL; head = creat(); Print(head); return 0; } 请问为什么这段代码输入两个数之后回车会死机?

C++ 链表类 基本操作

用C++构建链表类,并实现基本操作:删除,创建,显示全部,插入。。。

关于通讯录,数据结构的一道习题

编程实现如下功能: (1)构建一个通讯录类型,包含<姓名>、<电话>数据项。 (2)根据输入顺序表的长度n和各个数据元素值建立一个顺序表,并输出顺序表中各元素值,观察输入的内容与输出的内容是否一致。 (3)在顺序表的第i个元素之前插入一个值为x的元素,并输出插入后的顺序表中各元素值。 (4)删除顺序表中第i个元素,并输出删除后的顺序表中各元素值。 (5)在顺序表中查找值为e的数据元素,如果查找成功,则显示“查找成功”和该元素在顺序表中的位置,否则显示“查找失败”。 (6)采用链表实现以上顺序表的相应功能。 老师要求用C语言,然而我们并不会- -

求大神帮忙解决c++问题“简单通讯录程序”

编程实现简单通讯录程序。通讯者的基本信息包括编号、姓名、性别、年龄、 宅电、手机电话等信息。具体实现的管理功能如下: (1) 输入并显示多个通讯者的信息; (2) 可实现通讯者信息的添加; (3) 查询(至少提供按姓名和手机查询两种方式); (4) 修改(只提供按照姓名进行修改); (5) 删除(依据指定的信息删除如姓名、编号等)。 程序所显示的菜单内容如下: 请选择下面的一个项目: 1 创建 2 添加 3 查询 4 修改 5 删除 6 显示 7 退出 请选择:

数据结构双链表的插入和删除有问题了,求大佬看看

void insert(double price, int number,int time,char* name,int date,int id) { movRecord* node = record.next; movRecord* p = record.next; while (node != NULL) { if (node->id > id) break; else node = node->next; } movRecord* tmp = (movRecord *)malloc(sizeof(movRecord)); tmp->id = id; tmp->date = date; strcpy(tmp->name,name); tmp->time = time; tmp->number = number; tmp->price = price; if( id<10) { node->prior->next= tmp; tmp->prior=node->prior; tmp->next = node; node->prior=tmp; } else { node->prior->next=tmp; tmp->prior=node; tmp->next=NULL; } while(p!=NULL) { printf("电影编号:%3d\t放映日期:%10d\t电影名:%5s\t场次:%2d\t票数量:%4d\t票价:%5.2lf\t\n", p->id, p->date,p->name,p->time,p->number,p->price); p=p->next; } } void delete(int id) { movRecord* node = record.next; movRecord* p=record.next; while (node != NULL && node->id != id) { node = node->next; } if (node) { node->prior->next = node->next; node->next->prior = node->prior; free(node); } else printf("无法找到该文件\n"); while(p!=NULL) { printf("电影编号:%3d\t放映日期:%10d\t电影名:%5s\t场次:%2d\t票数量:%4d\t票价:%5.2lf\t\n", p->id, p->date,p->name,p->time,p->number,p->price); p=p->next; } }

C++ 在类里面实现链表的合并

我创建了一个类,里面包含链表的输入、输出、排序、打印、合并等等功能。然后我用类定义了两个变量,但是实现他们合并的时候懵了,这个函数应该要获取两个链表的头结点,我就不知道该怎么获取了,因为头结点是私有在类中的,求帮助!!! ![图片说明](https://img-ask.csdn.net/upload/201704/17/1492359556_374242.png) ![图片说明](https://img-ask.csdn.net/upload/201704/17/1492359570_898892.png) 主函数里面只输入了链表的长度,第二张图是结构体跟类的构造函数那部分

C++ 用于实现链表的类模板、继承、类模板声明问题

应该是语法问题,因为如果不选择使用继承的话编译就完全没问题。对于如何声明继承的类模板,定义继承的类模板以及在主类中声明继承类模板感觉好模糊。 后面一大串功能的实现应该和错误没有关系,可以选择忽略,主要是在前三个类。报错的点有问题。 我使用的是VS 2017。 真的查遍了百度翻遍了书实在是求助无门,谢谢好心人能为我指出问题所在。 谢谢! #include "stdafx.h" #include <iostream> #include <time.h> #include <vector> #include <string> using namespace std; /*代码在继承模板类、类声明语法、类定义语法、List中的嵌套类声明语法中有错。 *下面的调试会报错。但如果取消使用继承,程序能够正常编译通过。 *此程序用于实现List,算法与数据结构C++书中的例子。 *List类中的成员函数定义未全部完成,止于此。*/ template<typename Object> class List; template<typename Object> class Node; template<typename Object> class const_iterator; template<typename Object> class iterator : public const_iterator<Object>; template<typename Object> class List { private: Node<Object> *head, *tail; class const_iterator; class iterator : public const_iterator<Object>; int theSize; void init(); public: List() { init(); } List(const List &rhs); ~List(); int size() const { return theSize; } bool empty() const { return size() == 0; } void clear() { while (!empty()) pop_front(); } void erase(iterator iter); iterator begin() { return iterator(head->next;) } iterator end() { return iterator(tail->prev); } const_iterator begin() const { return const_iterator(head->next); } const_iterator end() const { return const_iterator(tail->prev); } void pop_front(); void pop_back(); void push_front(const Object &x); void push_back(const Object &x); Object &front(); const Object &front() const; Object &back(); const Object &back() const; }; template<class Object> class List<Object>::const_iterator { public: const_iterator() : current(NULL) { } const Object &operator* () { return retrieve(); } const_iterator &operator++() { current = current->next; return *this; } const_iterator operator++(int) { const_iterator old = *this; ++(*this); return old; } bool operator==(const Object &rhs) const { return current = rhs.current; } bool operator!=(const Object &rhs) const { return !(current = rhs.current); } protected: Node<Object> *current; Object &retrieve() { return current->data; } const_iterator(Node<Object> *n) : current(n) { } friend class List<Object>; }; template<class Object> class List<Object>::iterator : public const_iterator<Object> { public: iterator() { } Object &operator*() { return retrieve(); } iterator operator++() { current = current->next; return *this; } iterator operator++(int) { iterator old = *this; ++(*this); return old; } bool operator==(const Object rhs) { return current == rhs.current; } bool operator!=(const Object rhs) { return !(current == rhs.current) } protected: iterator(Node<Object> *n) : current(n) { } friend class List<Object>; }; template<class Object> class Node { public: Node *prev, *next; Object data; Node(const Object &d = Object(), Object *p = NULL, Object *n = NULL) : data(d), prev(p), next(x) { } }; template<typename Object> void List<Object>::push_front(const Object &x) { Node<Object> *n = new Node<Object>; n->data = x; head->next->prev = n; n->next = head->next; n->prev = head; head->next = n; theSize++; } template<typename Object> void List<Object>::push_back(const Object &x) { Node<Object> *n = new Node<Object>; n->data = x; tail->prev->next = n; n->prev = tail->prev; n->next = tail; tail->prev = n; theSize++; } template<typename Object> void List<Object>::erase(iterator iter) { Node *p = iter.current; p->next->prev = p->prev; p->prev->next = p->next; theSize--; delete p; } template<typename Object> void List<Object>::pop_front() { if (head->next == tail) cout << "List is empty" << endl; else erase(begin()); } template<typename Object> void List<Object>::pop_back() { if (head->next == tail) cout << "List is empty" << endl; else erase(end()); } template<typename Object> void List<Object>::init() { theSize = 0; head = new Node<Object>; tail = new Node<Object>; tail->prev = head; head->next = tail; } template<typename Object> List<Object>::~List() { clear(); delete head; delete tail; } int main( ) { system("pause"); return 0; }

数据结构清空链表的问题

p指向头结点L的下一个节点,但是总显示p=0xCDCDCDCDCD,百度之后知道是未初始化的意思,但是为什么会显示p未初始化,不是p = L->next了么

c++双向链表的创建及各种操作

怎么写有head,tail指针的双向链表的创建及数据输入的程序,也就是基于多态性的人员管理系统

树形的存储结构和双向有序链表的存储结构有什么不同呢?各有什么优势呢?

在做数据检索技术研究的时候,经常会遇到是用树形结构存储索引还是使用线性结构存储。不知道二者有什么不同,各有什么优势以及各自的适用场合。敬请各位赐教,谢谢。

C++读文件创建链表问题

请大家看看这道题应该怎么写呢? C++期末成绩存放在文本文件 “Score.txt”中,要求编写程序读取该文本文件创建链表,并在链表上根据学号查找姓名和成绩。 文本文件的各列之间使用空格分隔,文件行数不确定。 要求使用ifstream类和ofstream类的对象读取和写入数据。 链表的一个结点可声明如下: struct student { unsigned long id; string name; float score; student *next; //下一个结点的指针 } 循环从键盘读入学号,查询对应的姓名和成绩,输入学号为0时退出循环。

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

外包程序员的幸福生活

今天给你们讲述一个外包程序员的幸福生活。男主是Z哥,不是在外包公司上班的那种,是一名自由职业者,接外包项目自己干。接下来讲的都是真人真事。 先给大家介绍一下男主,Z哥,老程序员,是我十多年前的老同事,技术大牛,当过CTO,也创过业。因为我俩都爱好喝酒、踢球,再加上住的距离不算远,所以一直也断断续续的联系着,我对Z哥的状况也有大概了解。 Z哥几年前创业失败,后来他开始干起了外包,利用自己的技术能...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

深入剖析Springboot启动原理的底层源码,再也不怕面试官问了!

大家现在应该都对Springboot很熟悉,但是你对他的启动原理了解吗?

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

你期望月薪4万,出门右拐,不送,这几个点,你也就是个初级的水平

先来看几个问题通过注解的方式注入依赖对象,介绍一下你知道的几种方式@Autowired和@Resource有何区别说一下@Autowired查找候选者的...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《Oracle Java SE编程自学与面试指南》最佳学习路线图2020年最新版(进大厂必备)

正确选择比瞎努力更重要!

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

正确选择比瞎努力更重要!

字节跳动面试官竟然问了我JDBC?

轻松等回家通知

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

立即提问
相关内容推荐