链表排序出了问题,求大佬帮忙看看

输出时会中断,注释掉之后没有输出了;最后找到应该是链表排序的问题,但没找到哪里错了,求大佬解惑

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
/*定义单向链表类型StuLink,链表结点包含xh、xm、cj、dj、mc、nxet六个数据项
分别代表学生的学号、姓名、成绩、等级、名次和指向下一个结点的指针,
其中:学号、姓名、成绩是输入项,等级、名次是计算项*/
struct StuLink*Creat_Link();                    //创建链表
struct StuLink*Rank_Link(struct StuLink*list);  //计算名次
void display(struct StuLink *p);                //输出一个节电的内容
struct StuLink*Sort_Link(struct StuLink *list,int n);//链表排序
struct StuLink*Output_Link(struct StuLink*list,int n);//链表按顺序输出
void menu1();
void menu2();
int main()
{
    struct StuLink*list;
    menu1();
    list=Creat_Link ();
    //display(list);Output_Link(list,0);
    Rank_Link(list);
    //Output_Link(list,1);
    display(list);Output_Link(list,0);
    printf("嘤嘤嘤");
    return 0;

}
 struct StuLink
{
    int xh;
    char xm[20];
    int cj;
    char dj;
    int mc;
    struct StuLink*next;
};
 /* Creat_Link函数(10分):建立一个StuLink类型的学生链表,返回链表头指针
 每个链表结点代表一个学生信息,要求输入学号、姓名和成绩
 其中:学号从1开始按递增1自动生成,成绩必须在[0,100]区间的整数,当输入成绩为-1时,表示输入结束*/
struct StuLink*Creat_Link()
{
    struct StuLink*list=0,*p1=0,*p2;int i=0;
    int score;char name[20];
    //list->xh =0;p2=list;
    printf("\n输入成绩为-1,结束输入!\n");
    printf("请输入学生姓名");
    scanf("%s",name);
    printf("请输入学生成绩");
    scanf("%d",&score );
    while(score!=-1)
    {
        if(score<0||score>100)
            {
                    printf("输入成绩格式错误,请重新输入正确的学生成绩\n");
                    scanf("%d",&score );
                    continue ;

            }
        if( (p1=(struct StuLink*)malloc(sizeof(struct StuLink)))    ==0)
                    {
                        printf("动态内存空间分配失败\n");
                        exit(0);
                    }
        else
        {
            switch(score/10)
            {
                case 9:p1->dj='A';break;    //计算等级
                case 8:p1->dj='B';break;
                case 7:p1->dj='C';break;
                case 6:p1->dj='D';break;
                default:p1->dj='E';
            }
            i++;
            p1->xh =i;
            p1->cj =score;
            strcpy(p1->xm,name);

            if(list==0)
                list=p1;
            else
                p2->next=p1;
            p2=p1;
            printf("请输入学生姓名   ");
            scanf("%s",name);
            printf("请输入学生成绩   ");
            scanf("%d",&score);
            }
    }
    return list;
}
/*设计Rank_Link函数(10分):计算学生链表中每个学生的名次
名次规则:按成绩降序排名,从第1名开始依次排名,若出现并列名次,则名次需要叠加
例如,若出现5个并列第1名,则没有第2名,下一个名次是第6名,依此类推。*/
struct StuLink *Rank_Link(struct StuLink*list)
{
    struct StuLink *p1,*p2;
    p1=list;p2=list;;
    while(p1)
        {
            while(p2)
            {
                p1->mc=1;
                if(p1->cj<p2->cj)       //算法:每一个节点的成绩都依次和list开始所有节点比较一遍
                    (p1->mc)++;         //若有一个节点成绩更高,则名次变大1,成绩相同则不变;
                p2=p1->next;
            }
            p1=p1->next;
        }

    return list;
}
/*设计Sort_Link函数(10分):按指定数据项的顺序【学号(升序),或者,成绩(降序)】对学生链表进行排序*/

struct StuLink*Sort_Link(struct StuLink *list,int n)
{
    if(n=0)                     //若链表排序后改变了原学号排序方式和list,则其他函数诸多不变
    {}                      //故此处可新建一个链表,按名次进行排序;返回新链表地址                                (*****未完成*******)
                            //此处为判定排序方式;
}

/*设计Output_Link函数(10分):按指定数据项的顺序【学号(升序),或者,成绩(降序)】输出学生成绩表、各等级人数。
学生成绩表每行输出一个学生信息(依次为学号、姓名、成绩、等级和名次,各项间以1个空格隔开),各等级人数分行输出*/
void display(struct StuLink *p)
{
    printf("学号  %d",p->xh);
    printf("姓名  %s",p->xm);
    printf("成绩  %d",p->cj);
    printf("等级  %c",p->dj);
    if(p->mc>1)
    printf("名次  %d\n",p->mc);
    else
        printf("kong");
    if(p->mc)
    printf("名次  %d\n",p->mc);
    else
        printf("kong");

}
struct StuLink*Output_Link(struct StuLink *list,int n)
{
    struct StuLink *Rank_Link(list);
    int i=1,j=0;struct StuLink*p=NULL;p=list;
    if(n==1)            //如果按成绩名次输出
        {
                for(i=1;;i++)
                {  if(p)
                    {
                        if(p->mc ==i)
                        {
                            j++;
                            display(p);
                        }
                     p=p->next;
                    }                   //算法:由i循环控制,从头结点到尾先找到第i名并输出;(ok)
                else
                    if(j)               
                    continue;           //若上面判定是while(p),则p为空小循环停止后是否跳出第i词for循环进行下一次;
                    else
                        break;          //遍历链表后若无对应名次则所有名次学生均已输出,跳出i的for循环
                }
        }

    else
    {
        while(p)
        {
            display(p);
            p=p->next;
        }

    }
    return list;
}
void menu1 ()
{
    printf("===============================================\n");
    printf("||  1--创建链表     2--链表维护  ||\n");
    printf("||  3--计算排序     4--统计分析  ||\n");
    printf("||  5--报表输出     0--退出        ||\n");
    printf("===============================================\n");
    printf("            请输入菜单编号(0,1-5):          ");
}


Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java链表的问题,求大佬帮忙

怎么在java里写一个用双链表,而且链表里每一个节点还存着双链表,有没有例子呢,我该怎么让才能在最外面的main方法里使用链表里的链表呢??? 求大佬们解答

python实现链表重新排序问题

已经实现链表的数据结构和一些基本功能如求长度、插入新的数值等,现要对一个链表中的数字进行 排序,如(1,2,3,4,5)排序后成为(3,2,4,1,5),即以原来链表中第(length/2)个节点作为head,往后依次是原节点左1、右1、左2、右2...类推,求解如何不改变各个节点的地址实现排序。

C语言链表排序后为啥不能输出 求大佬解答

#include<stdio.h> #include<malloc.h> #include<string.h> #include<math.h> #include<stdlib.h> struct people { char name[20]; char phone[30]; char email[30]; struct people *next; }; int main() { struct people * head; struct people *creat(); void sort(struct people *head); head=creat(); sort(head); return 0; } struct people *creat() { struct people * head; struct people *p1,*p2; void save(struct people *p1); int i,n; p1=p2=(struct people*)malloc(sizeof(struct people)); i=1; n=0; head=NULL; printf("请输入:\n"); while(i==1) { printf("姓名:"); scanf("%s",&p1->name); printf("电话:"); scanf("%s",&p1->phone); printf("Email:"); scanf("%s",&p1->email); save(p1); if(n==0) head=p1; else p2->next=p1; p2=p1; p1=(struct people *)malloc(sizeof(struct people)); n=n+1; printf("继续输入请按1,退出请按0.\n"); scanf("%d",&i); } p2->next=NULL; return(head); } void save(struct people *p) { FILE *fp; char name[20]; printf("文件名称:"); scanf("%s",name); if((fp=fopen(name,"wb"))==NULL) { printf("cannot open file\n"); return; } if(fwrite(p,sizeof(struct people),1,fp)!=1) printf("file write error\n"); fclose(fp); } void sort(struct people *head) { struct people *p1,*p2,*tail,*p; tail=NULL; while((head->next->next)!=NULL) { p1=head; p2=head->next; while((p1->next->next)!=NULL) { if(strcmp((p1->name),(p1->next->name))>0) { p1->next=p2->next; p2->next=p2->next->next; p1->next->next=p2; p2=p1->next; } p1=p1->next; p2=p2->next; } tail=p2; } p=head; do {printf("姓名:%s 电话:%s\n",p->name,p->phone); p=p->next; }while(p!=NULL); }

c语言链表显示出错 求大佬帮忙

选项6出错 ![图片说明](https://img-ask.csdn.net/upload/201805/28/1527503476_559126.png) #include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> //定义全局变量 int isEmpty=0;//标志,判断链表是否为空 //!!!定义单链表结构体!!! typedef struct Node{ int NUM;//类型总数 char NAME[100];//各类型名称 int num; //各类型下的货物总数 struct Node*next; }Node; //函数声明 Node*create(int n,Node*L); Node*input(Node*L); Node*output(Node*L); Node*outnum(Node*L); Node*outname(Node*L); Node*current(Node*L); void search(Node*L); void print(Node*L); void searchnum(Node*L); void searchname(Node*L); void display(int n,Node*L); //========新增加的函数======== Node*append(Node*L); //主函数 void main() { int x; int n;//初次输入的大小 Node *L; if(!(L=(Node *)malloc(sizeof(Node)))) //分配空间 { printf("\n"); exit(1); } printf("欢迎使用我的仓库管理系统!\n"); while(1) { //主菜单开始 printf("==========================\n"); printf("1.显示货物类型列表\n"); printf("2.增加货物类型\n"); printf("3.删除货物类型\n"); printf("4.货物入库\n"); printf("5.货物出库\n"); printf("6.库存显示\n"); printf("7.退出\n"); printf("==========================\n"); //主菜单结束 printf("选择1-7:"); scanf("%d",&x); switch(x) { case 1:;break; case 2:printf("请输入最初的货物类型数量:\n"); scanf("%d",&n); create(n,L); break; case 3:;break; case 4:;break; case 5:;break; case 6:display(n,L);break; case 7:;break; default:printf("input error!\nplaese input1-7"); } } } //函数 //1.创建链表节点 Node*create(int n,Node*L) { Node*pTail=L; L->next=NULL; Node*p; p=(Node*)malloc(sizeof(Node)); if(p==NULL) { printf("申请内存空间失败!\n"); } //利用尾插建立单链表 int i; for(i=1;i<=n;i++) { printf("请输入第%d种类型编号:",i); scanf("%d",&p->NUM); printf("请输入第%d种类型名称:",i); scanf("%s",&p->NAME); printf("请输入第%d种类型库存:",i); scanf("%d",&p->num); putchar('\n'); pTail->next=p; pTail=p; } p->next=NULL; return L; } //2.增加货物类型 /*Node*append(Node*L) { Node*ptail=L; L->next=NULL; Node*p; p=(Node*)malloc(sizeof(Node)); if(p==NULL) { printf("申请内存空间失败!\n"); } else { printf("请输入新增加的类型编号:\n"); scanf("%d",&p->NUM); printf("请输入第%d种类型名称:\n",i); scanf("%s",&p->NAME); printf("请输入第%d种类型库存:\n",i); scanf("%d",&p->num); while(p->NUM>) { } pTail->next=p; pTail=p; } p->next=NULL; } return L; } */ //货物显示函数 void display(int n,Node*L) { Node*p; p=(Node*)malloc(sizeof(Node)); p=L->next; int i=0; //for(i=0;i<n;i++) //{ while(p!=NULL) { printf("第%d种类型名称:",&p->NUM); printf("%s\n",&p->NAME); printf("第%d种类型库存:",&p->NUM); printf("%d\n",&p->num); p=p->next; //} } }

链表排序c++ 冒泡怎么用

冒泡排序链表中使用方法希望可以发代码详细点c++语言中 ..........谢谢

老师要求对链表的每个信息进行排序,但这个链表排序不会啊,求大神求代码?

#include<stdio.h> #include<math.h> #include<string.h> #include<stdlib.h> char ppzz[100] = ""; char lwjj[100] = ""; struct PPZBOOK { char author[1000]; char name[1020]; char isbn[120]; char data[115]; char id[110]; char status[110]; struct PPZBOOK * next; }; struct PPZBOOK * Creat(); void AddBook(struct PPZBOOK * head); void DeleteBook(struct PPZBOOK * head); void PrintBookList(struct PPZBOOK * head); void SearchBook(struct PPZBOOK * head); void SaveBook(struct PPZBOOK * head); struct PPZBOOK * Creat() { struct PPZBOOK * head; head = (struct PPZBOOK *)malloc(sizeof(struct PPZBOOK)); head->next = NULL; return head; } void SaveBook(struct PPZBOOK * head) { struct PPZBOOK *p; FILE *fp; p = head; fp = fopen("books.txt", "w+"); while (p->next != NULL) { p = p->next; fprintf(fp, "|%-6.6s|%-10.10s|%-10.10s|%-10.10s|%-12.12s|%-6.6s|\n", p->id, p->name, p->author, p->isbn, p->data, p->status); } fclose(fp); printf("已将图书数据保存到 books.txt 文件\n"); } void AddBook(struct PPZBOOK *head) { struct PPZBOOK *s, *p; char hihi = 'Y'; p = head; while (p->next != NULL) { p = p->next; } while (hihi == 'Y' || hihi == 'y') { s = (struct PPZBOOK *)malloc(sizeof(struct PPZBOOK)); printf("请输入图书书号: "); fflush(stdin); scanf("%s", s->id); printf("请输入图书书名: "); fflush(stdin); scanf("%s", s->name); printf("请输入图书作者名: "); fflush(stdin); scanf("%s", s->author); printf("请输入图书ISBN: "); fflush(stdin); scanf("%s", s->isbn); printf("请输入图书出版时间: "); fflush(stdin); scanf("%s", s->data); printf("请输入图书状态: "); fflush(stdin); scanf("%s", s->status); p->next = s; p = s; s->next = NULL; printf(" ━━━━ 添加成功!━━━━\n"); printf("继续添加?(Y/N):"); fflush(stdin); scanf("%c", &hihi); if (hihi == 'N' || hihi == 'n') { system("cls"); break; } else if (hihi == 'Y' || hihi == 'y') { system("cls"); continue; } } SaveBook(head); return; } void SearchBook(struct PPZBOOK *head) { struct PPZBOOK * p; p = head; char temp[20]; char ttt[10]; int flog = 0; if (head == NULL || head->next == NULL) { printf(" ━━━━ 图书库为空!━━━━\n"); } else { printf("请输入你要查找的类型\n"); scanf("%s", &ttt); if (strcmp("书名", ttt) == 0) { printf("请输入您要查找的书名: "); fflush(stdin); scanf("%s", &temp); while (p != NULL) { if (strcmp(p->name, temp) == 0) { printf("图书已找到!\n"); printf("书号: %s\t\n", p->id); printf("书名: %s\t\n", p->name); printf("作者名: %s\t\n", p->author); printf("ISBN: %s\t\n", p->isbn); printf("出版时间: %s\t\n", p->data); printf("状态: %s\t\n", p->status); flog = 1; } if (p->next == NULL) { printf("查询完毕!\n"); } p = p->next; } if (flog == 0) { printf("抱歉,你要找的书不存在!\n"); } } else if (strcmp("作者", ttt) == 0) { printf("请输入您要查找的作者: "); fflush(stdin); scanf("%s", &temp); while (p != NULL) { if (strcmp(p->author, temp) == 0) { printf("图书已找到!\n"); printf("书号: %s\t\n", p->id); printf("书名: %s\t\n", p->name); printf("作者名: %s\t\n", p->author); printf("ISBN: %s\t\n", p->isbn); printf("出版时间: %s\t\n", p->data); printf("状态: %s\t\n", p->status); flog = 1; } if (p->next == NULL) { printf("查询完毕!\n"); } p = p->next; } if (flog == 0) { printf("抱歉,你要找的书不存在!\n"); } } else if (strcmp("ISBN", ttt) == 0) { printf("请输入您要查找的ISBN: "); fflush(stdin); scanf("%s", &temp); while (p != NULL) { if (strcmp(p->isbn, temp) == 0) { printf("图书已找到!\n"); printf("书号: %s\t\n", p->id); printf("书名: %s\t\n", p->name); printf("作者名: %s\t\n", p->author); printf("ISBN: %s\t\n", p->isbn); printf("出版时间: %s\t\n", p->data); printf("状态: %s\t\n", p->status); flog = 1; } if (p->next == NULL) { printf("查询完毕!\n"); } p = p->next; } if (flog == 0) { printf("抱歉,你要找的书不存在!\n"); } } } } void PrintBookList(struct PPZBOOK * head) { struct PPZBOOK * p; if (head == NULL || head->next == NULL) { printf(" ━━━━ 没有图书记录! ━━━━\n"); return; } p = head; while (p->next != NULL) { p = p->next; printf("%s %s %s %s %s %s\n", p->id, p->name, p->author, p->isbn, p->data, p->status); } printf("\n"); } void DeleteBook(struct PPZBOOK * head) { struct PPZBOOK *s, *p; char temp[20]; int panduan; panduan = 0; p = s = head; if (head == NULL || head->next == NULL) { printf(" ━━━━ 图书库为空!━━━━\n"); } else { printf("请输入您要删除的书名:"); scanf("%s", temp); while (p != NULL) { if (strcmp(p->name, temp) == 0) { panduan++; break; } p = p->next; } if (panduan == 1) { while (s->next != p) { s = s->next; } s->next = p->next; free(p); printf("━━━━ 删除成功! ━━━━\n"); system("cls"); } else { printf("您输入的书目不存在,请确认后输入!\n"); } } } void ChangeBook(struct PPZBOOK * head) { struct PPZBOOK *pp; pp = head; if (head == NULL || head->next == NULL) { printf(" ━━━━ 图书库为空!━━━━\n"); } else { char tmp[100]; char ttt[100]; int g = 0; int flog = 0; printf("请输入你要修改的种类:φ(>ω<*) \n"); printf("1.修改书名\n2.修改作者\n3.修改状态\n友情提示:按其他数字键可以退出哦(*/ω\*)\n"); scanf("%d", &g); if (g == 1) { printf("请输入你要修改的书名:\n"); fflush(stdin); scanf("%s", &tmp); while (pp != NULL) { if (strcmp(pp->name, tmp) == 0) { printf("\n图书已找到!\n"); printf("\n"); printf("请输入你要它变为什么:\n"); scanf("%s", &ttt); strcpy(pp->name, ttt); flog = 1; } if (pp->next == NULL) { printf("正在为你修改!\n"); } pp = pp->next; } if (flog == 1) { printf("修改成功!\n"); } else { printf("修改失败!可能是你输入的信息我没找到\n"); } } else if (g == 2) { printf("请输入你要修改的作者:\n"); fflush(stdin); scanf("%s", &tmp); while (pp != NULL) { if (strcmp(pp->author, tmp) == 0) { printf("\n图书已找到!\n"); printf("\n"); printf("请输入你要它变为什么:\n"); scanf("%s", &ttt); strcpy(pp->author, ttt); flog = 1; } if (pp->next == NULL) { printf("正在为你修改!\n"); } pp = pp->next; } if (flog == 1) { printf("修改成功!\n"); } else { printf("修改失败!可能是你输入的信息我没找到\n"); } } else if (g == 3) { printf("请输入你要修改的状态:\n"); fflush(stdin); scanf("%s", &tmp); while (pp != NULL) { if (strcmp(pp->status, tmp) == 0) { printf("\n图书已找到!\n"); printf("\n"); printf("请输入你要它变为什么:\n"); scanf("%s", &ttt); strcpy(pp->status, ttt); flog = 1; } if (pp->next == NULL) { printf("正在为你修改!\n"); } pp = pp->next; } if (flog == 1) { printf("修改成功!\n"); } else { printf("修改失败!可能是你输入的信息我没找到\n"); } } else { printf("正在退出。。。。。。。。已退出\n"); } } } int Mima(char lwj[]) { if ((strcmp(lwjj, lwj) == 0) || (strcmp("123456", lwj) == 0)) { return 2; } else { return 1; } } void M(char q[]) { FILE *fp; fp = fopen("pwd.dat", "w+"); fprintf(fp, "%s\n", q); fclose(fp); strcpy(lwjj, q); } int User(char ppz[]) { if ((strcmp(ppzz, ppz) == 0) || (strcmp("admin", ppz) == 0)) { return 2; } else { return 1; } } void U(char p[]) { FILE *fp; fp = fopen("zhl是小可爱.txt", "w+"); fprintf(fp, "%s\n", p); fclose(fp); strcpy(ppzz, p); } void menu() { int choice = 0; struct PPZBOOK * head; head = NULL; while (1) { printf("●○○○○○○○○○○○○○○○○○○○○○○○○○○●\n"); printf("○ ○\n"); printf("○ 1、显示所有书籍 ○\n"); printf("○ 2、添加书籍信息 ○\n"); printf("○ 3、修改书籍信息 ○\n"); printf("○ 4、删除书籍信息 ○\n"); printf("○ 5、查询书籍信息 ○\n"); printf("○ 6、结束应用程序 ○\n"); printf("○ ○\n"); printf("●○○○○○○○○○○○○○○○○○○○○○○○○○○●\n"); printf("请选择:"); fflush(stdin); scanf("%d", &choice); switch (choice) { case 1: PrintBookList(head); break; case 2: if (head == NULL) { head = Creat(); } AddBook(head); break; case 3: ChangeBook(head); break; case 4: DeleteBook(head); break; case 5: SearchBook(head); break; case 6: printf("\n"); printf("**************** 感谢使用lwj的图书管理系统 ****************\n"); exit(1); default: printf(" ━━━━ (╬ ̄皿 ̄)=○#( ̄#)3 ̄) 你是傻的吗?<( ̄ ﹌  ̄)@m 这都会输入错误,快点请重新输入!━━━━\n"); break; } } } void jiemian() { char mima[100]; char user[100]; int count = 1; int s = 0, l = 0, j; printf("亲爱的用户,您是否已有账号密码了呢? ̄ω ̄=\n"); printf("如果有的话请按1,否则请按2\n"); while (1) { scanf("%d", &j); if (j == 1) { system("cls"); printf("●○○○○○○○○○○○○○○○●\n"); printf("○ ○\n"); printf("○ 请输入用户名和密码: ○\n"); printf("○ ○\n"); printf("●○○○○○○○○○○○○○○○●\n"); printf("你只有5次机会来输入正确的用户名和密码。(^_?)☆\n"); while (count < 6) { printf("第%d次\n", count); printf("请输入用户名:"); scanf("%s", user); l = User(user); printf("请输入密码:"); scanf("%s", &mima); s = Mima(mima); if (l == 2 && s == 2) { system("cls"); menu(); } else { printf("用户名或密码错误!b( ̄▽ ̄)d\n"); } count++; } break; } else { printf("(o?▽?)o 请输入你要注册的用户名:(ノ ̄▽ ̄)\n"); scanf("%s", user); U(user); printf("(o?▽?)o 请输入你要注册的密码:(ノ ̄▽ ̄)\n"); scanf("%s", mima); M(mima); printf("哇塞!注册成功了耶ヽ( ̄▽ ̄)?\n"); printf("请按1登录系统吧!(*/ω\*)\n"); } } } int main() { jiemian(); return 0; }

简单的链表排序的问题

题目:如,给出 1->3->2->null,给它排序变成 1->2->3->null. 写了简单的答案不能通过求帮忙看下错误原因 第一次提问这个格式怎么编辑o(╯□╰)o /** * Definition of ListNode * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) { * this->val = val; * this->next = NULL; * } * } */ class Solution { public: /** * @param head: The first node of linked list. * @return: You should return the head of the sorted linked list, using constant space complexity. */ ListNode *sortList(ListNode *head) { // write your code here if(head==NULL) return NULL; if(head->next==NULL) return head; ListNode *dummy = new ListNode(0); ListNode *temp = dummy; vector<int> nums; while(head!=NULL) { nums.push_back(head->val); head = head->next; } sort(nums.begin(),nums.end()); for(int i = 0;i < nums.size();i++) { temp->next->val = nums[i]; temp = temp->next; } temp->next = NULL; return dummy->next; } };

c语言链表排序问题(非交换成员)

struct scool student{ char name[10]; int score; } 从键盘获取输入,创建这样一个链表。 然后按照成绩值进行降序排序(交换链表中结构体位置而不是成员值)怎么实现。我通过冒泡排序for(one=head;one!=NULL;one=one->next) for(two=one->next;two!=NULL;two=two->next) { if() {......} } 一直实现不了,不知道哪里出问题。

小白请教C语言链表排序的问题?

能不能帮看一下我的排序函数哪里有问题,谢谢! ![图片说明](https://img-ask.csdn.net/upload/2016![图片说明](https://img-ask.csdn.net/upload/201608/27/1472270981_203754.png)08/27/1472270972_5742.png) #include<stdio.h>/*引用库函数*/ #include<string.h> #include<stdlib.h> #include<malloc.h> struct Lib/*定义图书信息的结构体变量*/ { char name[10];/*图书名*/ char writter[10];/*作者名*/ char number[10];/*分类号*/ char pub[10];/*出版社*/ char time[10];/*出版时间*/ char price[10];/*价格*/ struct Lib* next; }; #define LEN sizeof(struct Lib) struct Lib* head = NULL;/*头指针为空*/ /*函数声明*/ void input();/*图书信息录入函数*/ void output();/*图书信息浏览函数*/ void out();/*退出系统函数*/ void menu();/*菜单函数*/ int login();/*登录函数*/ void save();/*图书信息保存函数*/ void search();/*图书信息查询函数*/ void del();/*图书信息删除函数*/ void sort();/*图书信息排序函数*/ void modify();/*图书信息修改函数*/ void modify_output();/*图书信息修改后输出函数*/ int main()/*主函数*/ { printf("请输入密码:"); login(); printf("***********菜单***********\n"); menu(); return 0; } int login() { char password[10]; char password1[10] = "admin"; scanf("%s", password); if (strcmp(password, password1) == 0)/*检查密码是否正确*/ printf("密码正确!\n"); else { printf("密码错误!请重试!\n"); login(); } return 1; } void menu() { int n; printf(" ┏━━━━━━━━┓\n"); printf(" ┃1:图书信息录入 ┃\n"); printf(" ┃2:图书信息浏览 ┃\n"); printf(" ┃3:图书信息查询 ┃\n"); printf(" ┃4:图书信息排序 ┃\n"); printf(" ┃5:图书信息删除 ┃\n"); printf(" ┃6:图书信息修改 ┃\n"); printf(" ┃7:退出系统 ┃\n"); printf(" ┗━━━━━━━━┛\n"); printf("请输入选项前对应数字:"); scanf("%d", &n); if (n == 1) { input(); save(); menu(); } else if (n == 2) { output(); menu(); } else if(n==3) search(); else if(n==4) sort(); else if(n==5) del(); else if (n == 6) modify(); else if(n==7) out(); else { printf("输入错误!请重新输入!\n"); menu(); } } void input() { Lib *end; Lib *p1; int isempty = 0;/*标记变量初值*/ if (!head)/*检查head是否为空*/ { end = head = (Lib*)malloc(sizeof(Lib));/*申请新的内存空间*/ isempty = 1;/*改变变量初值*/ head->next = NULL; } else { end = head; while (end->next)/*使end->next为空*/ end = end->next; } char answer[5] = "yes", answer1[5]; if (isempty)/*检查是否已开辟内存空间*/ p1 = head; else p1 = (Lib*)malloc(sizeof(Lib)); printf("书名:"); scanf("%s", p1->name); printf("作者名:"); scanf("%s", p1->writter); printf("分类号:"); scanf("%s", p1->number); printf("出版单位:"); scanf("%s", p1->pub); printf("出版时间:"); scanf("%s", p1->time); printf("价格:"); scanf("%s", p1->price); if (!isempty)/*检查变量初值是否已被改变*/ { end->next = p1; end = p1; end->next = NULL; } printf("是否继续录入?Yes or not\n"); scanf("%s", answer1); while (strcmp(answer1, answer) == 0)/*连续录入图书信息*/ { p1 = (Lib*)malloc(LEN);/*申请新的内存空间*/ printf("书名:"); scanf("%s", p1->name); printf("作者名:"); scanf("%s", p1->writter); printf("分类号:"); scanf("%s", p1->number); printf("出版单位:"); scanf("%s", p1->pub); printf("出版时间:"); scanf("%s", p1->time); printf("价格:"); scanf("%s", p1->price); end->next = p1; end = p1; end->next = NULL; printf("是否继续录入?Yes or not\n"); scanf("%s", answer1); } } void save() { Lib *p = head; FILE *w = fopen("output.txt", "w");/*打开output.txt文件*/ if (!w) { printf("打开文件失败!"); return; } int n = 1; while (p)/*将图书信息保存到output.txt文件中*/ { fprintf(w, "%d: %s %s %s %s %s %s \n", n++, p->name, p->writter, p->number, p->pub, p->time, p->price); p = p->next; } fclose(w); } void output() { Lib *p = head; int n = 1; printf("图书信息如下:\n"); printf("\t书名\t作者名\t分类号\t出版单位\t出版时间\t价格\n"); while (p)/*输出图书信息*/ { printf("%d. %8s %8s %8s %8s %15s %15s \n", n++, p->name, p->writter, p->number, p->pub, p->time, p->price); p = p->next; } } void search() { Lib *p; int n; char book[10],wri[10]; p=head; printf(" ┏━━━━━━━━━━┓\n"); printf(" ┃1:按图书名查询 ┃\n"); printf(" ┃2:按作者名查询 ┃\n"); printf(" ┗━━━━━━━━━━┛\n"); scanf("%d",&n); if(n==1) { printf("请输入图书名:"); scanf("%s",book); while(strcmp(book, p->name)!=0)/*查找相应图书*/ p=p->next; if(p) { printf("图书信息如下:\n"); printf("\t书名\t作者名\t分类号\t出版单位\t出版时间\t价格\n"); printf("%8s %8s %8s %8s %15s %15s \n", p->name, p->writter, p->number, p->pub, p->time, p->price); menu(); } else { printf("没有要查询的图书!\n"); menu(); } } else if(n==2) { printf("请输入作者名:"); scanf("%s",wri); while(strcmp(wri, p->writter)!=0)/*查找相应图书*/ p=p->next; if(p) { printf("图书信息如下:\n"); printf("\t书名\t作者名\t分类号\t出版单位\t出版时间\t价格\n"); printf("%8s %8s %8s %8s %15s %15s \n", p->name, p->writter, p->number, p->pub, p->time, p->price); menu(); } else { printf("没有要查询的图书!\n"); menu(); } } else { printf("输入错误!\n"); menu(); } } void sort() { Lib *p,*pfirst,*ptail,*pmin,*pminBefore; p=head; int n; printf(" ┏━━━━━━━━━━┓\n"); printf(" ┃1:按价格从低到高排序┃\n"); printf(" ┃2:按价格从高到低排序┃\n"); printf(" ┗━━━━━━━━━━┛\n"); printf("请选择排序标准(输入选项前数字):"); scanf("%d",&n); if(n==1) { pfirst = NULL; while (head != NULL) /*在链表中找键值最小的节点。*/ { for (p = head, pmin = head; p->next != NULL; p = p->next) /*循环遍历链表中的节点,找出此时最小的节点。*/ { if (p->next->price < pmin->price) /*找到一个比当前min小的节点。*/ { pminBefore = p; /*保存找到节点的前驱节点*/ pmin = p->next; /*保存键值更小的节点。*/ } } if (pfirst == NULL) /* 如果有序链表目前还是一个空链表 */ { pfirst = pmin; ptail = pmin; } else /* 如果有序链表中已经有节点*/ { ptail->next = pmin; /* 把刚找到的最小节点放到最后*/ ptail = pmin; } if (pmin == head) /* 如果找到的最小节点就是第一个节点*/ { head = head->next; } else /*如果不是第一个节点*/ { pminBefore->next = pmin->next; /*让pmin离开原链表。*/ } } if (pfirst != NULL) /*循环结束得到有序链表first */ { ptail->next = NULL; } int n=1; printf("价格从低到高信息如下:\n"); printf("\t书名\t作者名\t分类号\t出版单位\t出版时间\t价格\n"); while (pfirst)/*输出图书信息*/ { printf("%d. %8s %8s %8s %8s %15s %15s \n", n++, pfirst->name, pfirst->writter, pfirst->number, pfirst->pub, pfirst->time, pfirst->price); pfirst = pfirst->next; } menu(); } else { printf("输入错误!\n"); menu(); } } void del() { Lib *p,*p1; p=head; char book[10]; printf("请输入要删除的图书名:"); scanf("%s",book); while(strcmp(book, p->name)!=0)/*查找相应图书*/ { p1=p; p=p->next; } if(p) { p1->next=p->next; p=head; printf("删除成功!\n现在图书信息如下:\n"); printf("\t书名\t作者名\t分类号\t出版单位\t出版时间\t价格\n"); int n=1; while (p) { printf("%d. %8s %8s %8s %8s %15s %15s \n", n++, p->name, p->writter, p->number, p->pub, p->time, p->price); p = p->next; } menu(); } else { printf("库中没有此图书!\n"); menu(); } } void modify() { Lib *p,*p1; int n; p=head; char a[10]; printf(" ┏━━━━━┓\n"); printf(" ┃1:图书名 ┃\n"); printf(" ┃2:作者名 ┃\n"); printf(" ┃3:分类号 ┃\n"); printf(" ┃4:出版单位┃\n"); printf(" ┃5:出版时间┃\n"); printf(" ┃6:价格 ┃\n"); printf(" ┗━━━━━┛\n"); printf("请选择要修改的信息(输入选项前的数字):\n"); scanf("%d",&n); if(n==1) { printf("原来的图书名是:"); scanf("%s",a); while(strcmp(a, p->name)!=0)/*查找相应图书*/ { p1=p; p=p->next; } if(p) { printf("现在的图书名是:"); scanf("%s",p->name); modify_output();/*输出修改后的图书信息*/ } else { printf("库中没有此图书!\n"); menu(); } } else if(n==2) { printf("原来的作者名是:"); scanf("%s",a); while(strcmp(a, p->writter)!=0) { p1=p; p=p->next; } if(p) { printf("现在的作者名是:"); scanf("%s",p->writter); modify_output(); } else { printf("库中没有此图书!\n"); menu(); } } else if(n==3) { printf("原来的分类号是:"); scanf("%s",a); while(strcmp(a, p->number)!=0) { p1=p; p=p->next; } if(p) { printf("现在的分类号是:"); scanf("%s",p->number); modify_output(); } else { printf("库中没有此图书!\n"); menu(); } } else if(n==4) { printf("原来的出版单位是:"); scanf("%s",a); while(strcmp(a, p->pub)!=0) { p1=p; p=p->next; } if(p) { printf("现在的出版单位是:"); scanf("%s",p->pub); modify_output(); } else { printf("库中没有此图书!\n"); menu(); } } else if(n==5) { printf("原来的出版时间是:"); scanf("%s",a); while(strcmp(a, p->time)!=0) { p1=p; p=p->next; } if(p) { printf("现在的出版时间是:"); scanf("%s",p->time); modify_output(); } else { printf("库中没有此图书!\n"); menu(); } } else if(n==6) { printf("原来的价格是:"); scanf("%s",a); while(strcmp(a, p->price)!=0) { p1=p; p=p->next; } if(p) { printf("现在的价格是:"); scanf("%s",p->price); modify_output(); } else { printf("库中没有此图书!\n"); menu(); } } } void modify_output() { Lib *p; p=head; int c=1; printf("修改成功!\n现在图书信息如下:\n"); printf("\t书名\t作者名\t分类号\t出版单位\t出版时间\t价格\n"); while (p)/*输出修改后的图书信息*/ { printf("%d. %8s %8s %8s %8s %15s %15s \n",c++,p->name, p->writter, p->number, p->pub, p->time, p->price); p = p->next; } menu(); } void out() { printf("退出成功!\n"); }

线性表中的无头节点链表排序

第五题怎么做,用c语言编程代码是什么?![图片](https://img-ask.csdn.net/upload/201610/15/1476486886_512785.jpg)

自己写的链表小程序,请大神帮忙看看

以下是一段链表程序,链表创建和输出函数都没有问题,但是这个函数执行时好像陷入了死循环,我找不到问题在哪里,大神们帮忙看下,多谢了 void deletelink(int min,int max,linknode *phead)//给出增序链表头指针,删除大于 min 小于max的链表 { linknode *pa,*pb,*pc,*pnow=phead; while(pnow->next!=NULL&&pnow->next->data<=min) { pnow=pnow->next; }//链表有头结点,假设链表有9元素,头结点值为0;0-1-2-3-4-5-6-7-8-9,头结点不包括在内,min=2,max=5。先让pnow循环 至 2处 pa=pnow;//pa=2 pnow=pnow->next; pb=pnow; //pb=pnow=3 if(pnow!=NULL)//若pnow不空 { while(pnow!=NULL&&pnow->data<max) { pnow=pnow->next; }//让pnow循环至 5 处 pa->next=pnow;//2 指向 5 while(pb!=pnow)//删除 3开始 一直到5之前的节点 { pc=pb; pb=pb->next; free(pc); } } }

求助,关于c语言链表排序的问题

做了两个链表 每个节点内有一个学生的编号和成绩,现在要求把两个链表合并,然后按照学号升序排列 不知道为啥 第65行总是报错 我整了一个小时了 没发现哪里错了,貌似运行时候显示说我引用了一个不可以引用的地址?求助大神谢谢了 ``` #include <stdio.h> #include <stdlib.h> #define LEN sizeof(struct Person) struct Person { int num; float score; struct Person *next; }; struct Person *createPerson(); void printLink(struct Person *); struct Person *merge(struct Person *, struct Person *); struct Person *mergeAndSort(struct Person *, struct Person *); void sort(struct Person *[], int); int main() { struct Person *p1 = createPerson(); struct Person *p2 = createPerson(); // struct Person *pPerson = merge(p1, p2); struct Person *pPerson = mergeAndSort(p1, p2); printLink(pPerson); return 0; } void sort(struct Person *arr[], int n) { struct Person *tmp; for (int i = 0; i < n - 1; i++) { for (int j = i + 1; j < n; j++) { if (arr[i]->num > arr[j]->num) { //swap tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } } } } struct Person *mergeAndSort(struct Person *a, struct Person *b) { struct Person *arr[64]; struct Person *head; int i = 0, x; while (a != NULL) { arr[i] = a; a = a->next; i++; } while (b != NULL) { arr[i] = b; b = b->next; i++; } sort(arr, i); //reCreateLink head = arr[0]; head->next = arr[1]; for (x = 1; x < i - 1; x++) { (arr[i])->next = arr[i + 1]; } arr[x]->next = NULL; return head; } struct Person *merge(struct Person *a, struct Person *b) { struct Person *tmp = a; while (tmp->next != NULL) { tmp = tmp->next; } tmp->next = b; return a; } void printLink(struct Person *p) { while (p != NULL) { printf("%d\t%f\n", p->num, p->score); p = p->next; } } struct Person *createPerson() { struct Person *p1, *p2, *head; p1 = p2 = (struct Person *) malloc(LEN); scanf("%d %f", &p1->num, &p1->score); int size = 0; while (p1->num != 0) { size++; if (size == 1) { head = p1; } else { p2->next = p1; } p2 = p1; p1 = (struct Person *) malloc(LEN); scanf("%d %f", &p1->num, &p1->score); } p2->next = NULL; printf("Establish complete\n"); return head; }; ```

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

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语言版

死循环了,不懂为什么,求哥哥姐姐们指教!我是新手,莫怪--- ``` struct student *sort(struct student *head) { if(!head) { goto END; } struct student *min,*p,*end; struct student temp; for(min = head;min != NULL;min = min->next) { end = min; } for(min = head;min != NULL;min = min->next) { for(p = head;p != end;p = p->next) { printf("123"); if(min->num > p->num) { temp = *min; *min = *p; *p = temp; printf("paixu\n"); } } } END: return head; } ``` ``` ```

数据结构C语言链表输入排序问题

题目: 持续输入 学号,姓名,地址 -1终止输入 _再按照学号从小到大顺序输出_ 个人感觉问题可能出在31行到38行 插入在链表最前面的时候会出现问题,其他情况没有问题 _测试 输入会错误的情况(插在开头):_ 3,sfdfs,sdfsfd 2,sdf,sdf,sfd -1 测试 输入会正确的情况: 3,sdf,sd,sfd 5,fsd,sdf 4,dsf,sdf -1 /////姓名和地址就乱打几个字符了。。。 下面是关于链的的数据的调试截图(输出_会错误的情况_,数据见上文 ) ![图片说明](https://img-ask.csdn.net/upload/201804/02/1522667445_697244.png) 直到输入 —1终止前 ,都是正确的(↑↑↑第一张调试图,排序也是对的) 但是终止后,就会无限输出开头的(↓↓↓最后输入的插到开头的那个数) 主链变成next永远指向自己的。 ![图片说明](https://img-ask.csdn.net/upload/201804/02/1522667643_272901.png) 虽然是用双链表写的,但是没什么关系。 个人感觉问题在出在指针返还值或者函数返还值上面,_步骤应该都是没有问题的_,调试了很多遍 ``` #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct node { char name[20]; char add[20]; int nu; struct node *pre; struct node *next; }Newnode; Newnode sort( node *q, Newnode *inser ) /* sort+insert 找到位置插入 */ { Newnode *temp = q; while ( 1 ) { if ( temp->next == NULL && temp->nu < inser->nu ) /* 插在尾的情况,插入数大于所有temp + 第一个数时插在后面 */ { temp->next = inser; inser->pre = temp; return(*q); } if ( temp->pre == NULL && temp->nu > inser->nu ) /* 第一个数时插在前面 */ { /* printf("okOK"); */ /* temp->pre=inser; */ inser->next = temp; return(*inser); } } inser->next = temp; inser->pre = temp->pre; temp->pre->next = inser; temp->pre = inser; return(*q); } Newnode add( Newnode *q ) //q就是主链的地址 { int count = 0; while ( 1 ) { Newnode *newnode; newnode = (Newnode * ) malloc( sizeof(Newnode) ); scanf( "%d,", &newnode->nu ); if ( newnode->nu == -1 ) { return(*q); } newnode->next = NULL; newnode->pre = NULL; scanf( "%[^,]%[^\n]", newnode->name, newnode->add ); if ( q->pre == NULL && q->next == NULL && count == 0 ) { q = newnode; count++; /* 第一个数的输入,只输入一次 */ continue; }else *q = sort( q, newnode ); /* 从第二个数开始就插入,这里的指针传递对吗。。。 */ } return(*q); } void printall( Newnode *q ) { Newnode *temp = q; /* temp当前指针 */ printf( "%d %s %s\n", q->nu, q->name, q->add ); temp = temp->next; /* printf("%d %s %s\n",temp->nu,temp->name,temp->add); */ while ( temp != NULL ) { printf( "%d %s %s\n", temp->nu, temp->name, temp->add ); temp = temp->next; } /* printf("%d %s %s\n",temp->nu,temp->name,temp->add); */ } /* ////////////////////// */ int main( void ) { char inpu; int inpu2; Newnode p; p.pre = NULL; p.next = NULL; p = add( &p ); printall( &p ); } ``` 第一个特别输入 其他 找到位置,然后插入,排序一个插入一个。 调试调试吧。 再次说一下,步骤应该是没有问题的。(除了插在开头的情况会出现错误)调试了很多数据了。感觉问题应该出在指针返还上面。

链表排序(for读取指针问题)出错,求大佬解惑

链表的排序函数,和我上一个提问都是使用了这种for循环读取指针然后对指针的值进行操作,都导致被操作的指针发生了越界错误,``` struct StuLink*Sort_Link(struct StuLink *list) { struct StuLink *p1,*p2,*p3=NULL; for(p1=list;p1->next!=NULL;p1=p1->next) for(p2=p1->next;p2!=NULL;p2=p2->next) { if(p1->cj<p2->cj) { p3->cj=p1->cj; p3->xh=p1->xh; p3->dj=p1->dj; strcpy(p3->xm,p1->xm); p1->cj=p2->cj; p1->xh=p2->xh; p1->dj=p2->dj; strcpy(p1->xm,p2->xm); p2->cj=p3->cj; p2->xh=p3->xh; p2->dj=p3->dj; strcpy(p2->xm,p3->xm); } } Output_Link(list); return list; } ``` 贴上一次的while循环代码 ``` //struct StuLink*Rank_Link(struct StuLink*list) //{ // struct StuLink *p1,*p2; // p1=list; // for(;p1!=NULL ;p1=p1->next) // for(p2=list;p2!=NULL;p2=p2->next) // { // if(p1->xh==p2->xh) // continue; // if(p1->cj<p2->cj) // p1->mc++; // } // return list; //} ```

请问这个对链表进行排序的函数有什么问题?

![图片说明](https://img-ask.csdn.net/upload/201506/14/1434267387_924491.png)

c语言课程设计-双向链表(自学看不懂)之绝望 求大佬引路 感激涕零

![图片说明](https://img-ask.csdn.net/upload/201805/23/1527081349_209316.png) 问题: 1.操作1是不是要用文件?用一个文本文件记录 2.这个程序需不需要利用双向链表? 3.这个程序最好做几个结构体? 4.货物类型和货物入库之间存在什么关系?? 5.好绝望呀呀呀呀 6.求大佬引路 7.感激涕零 无以为报

链表相关问题,不知道哪里出错了,求大佬看看?

``` void InitList(LinkList &L) { L = (LinkList)malloc(sizeof(LNode)); if (!L) exit(OVERFLOW); L->next = nullptr; } ``` ``` Status ListEmpty(LinkList L) { if (L->next) return FALSE; else return TRUE; } ``` ``` int ListLength (LinkList L) { LinkList q; q = L->next; int i = 0; while (q) { i++; q = q->next; } return i; } ``` ``` int main() { LinkList L; ElemType e; Status i; int j, k; InitList(L); //构造一个空的链表 for (j = 1; j <= 5; j++) { ListInsert(L, 1, j); //在链表L的第一个元素之前插入j } for (j = 1;j <= 5; j++) { L = L->next; printf("%d\n", L->date); } i = ListEmpty(L); printf("是否为空表? i =%d(1:是,0:否),表L的长度 = %d\n",i, ListLength(L)); system("pause"); return 0; } ``` ![图片说明](https://img-ask.csdn.net/upload/201912/03/1575377620_110269.png) 求大佬看一下啊 为什么前边输出了54321 后边还显示为空表啊 ,自己折腾了半天 没弄明白哪里错了

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

今年,我也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主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《经典算法案例》01-08:如何使用质数设计扫雷(Minesweeper)游戏

我们都玩过Windows操作系统中的经典游戏扫雷(Minesweeper),如果把质数当作一颗雷,那么,表格中红色的数字哪些是雷(质数)?您能找出多少个呢?文中用列表的方式罗列了10000以内的自然数、质数(素数),6的倍数等,方便大家观察质数的分布规律及特性,以便对算法求解有指导意义。另外,判断质数是初学算法,理解算法重要性的一个非常好的案例。

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

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

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

轻松等回家通知

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

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

终于,月薪过5万了!

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

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

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

立即提问
相关内容推荐