c语言链表问题,希望能在10号之前得到解答

每个学生的信息卡片包括学号、姓名和成绩三项。定义存储学生信息的单向链表的结点类型;编写函数,由文件依次读入 n (n≥0)个学生的信息,创建一个用于管理学生信息的单向链表;编写函数,对该链表进行整理,保证该单向链表的结点顺序满足学号从小到大的顺序。

1个回答

给个奖励就给你做
或者这里给你帮助:
直接实现个链表,正常读取文件,数据整合进入链表中,每次插入都进行排序,即可

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

有链表指针p1,想向结构体中的结构体时间中的变量日输入数值,如何写代码?

关于C语言链表学习入门遇到瓶颈

怎样学习C语言中的链表,有没有什么好的文章博客,详细易懂,发一下链接,谢谢

c语言链表删除节点问题

#include <stdio.h> #define NUll 0 #include <stdlib.h> struct stu { char name[6]; int xuehao; int grade; struct stu *next; }; typedef struct stu STU; main() { STU *p,*p_start,*p2,*p_print,*p_charu,*p_charu2; int i,xuehao; //输入 for (i=0;i<3;i++) { p=(STU *)malloc(sizeof(STU)); printf("请输入学生姓名:\n"); scanf("%s",&p->name); printf("请输入学生的学号:\n"); scanf("%d",&p->xuehao); printf("请输入学生的成绩:\n"); scanf("%d",&p->grade); if (i==0) p2=p_start=p; else { p2->next=p; p2=p; if (i==2) p->next=NULL; } } // printf("%d",p_start->next->next->next); // printf("%d",p_start->next->next->xuehao); //链表的插入 p_charu=p_start; printf("请输入要删除的学号\n"); scanf("%d",&xuehao); while (1) { p_charu2=p_charu->next; if (p_charu->next->xuehao==xuehao) { // if (p_charu->next->next==NULL) // p_charu->next=NULL; else p_charu->next=p_charu->next->next; free(p_charu2); break; } if (p_charu->xuehao==xuehao) { p_start=p_charu->next; free(p_charu); break; } p_charu=p->next; } //输出 p_print=p_start; /* for (i=0;i<2;i++) { printf("学生姓名为:%s\n",p_print->name); printf("学生的学号为:%d\n",p_print->xuehao); printf("学生的分数为:%d\n",p_print->grade); if (p_print->next!=NULL) p_print=p_print->next; } */ } 这是一个删除结点并输出的程序, 加注释的输出部分没有问题,关键应该在删除结点的循环那里,但是找不见错误啊, 错误为:当删除最后一个链表也就是3时程序发生错误,停止运行。 求解

c语言链表节点删除问题求解

这是一个删除结点并输出的程序,总共有三个链表 错误为:当删除最后一个链表也就是3时程序发生错误,停止运行。 求大家帮忙解解决! ``` #include <stdio.h> #define NUll 0 #include <stdlib.h> struct stu { char name[6]; int xuehao; int grade; struct stu *next; }; typedef struct stu STU; main() { STU *p,*p_start,*p2,*p_print,*p_charu,*p_charu2; int i,xuehao; //输入 for (i=0;i<3;i++) { p=(STU *)malloc(sizeof(STU)); printf("请输入学生姓名:\n"); scanf("%s",&p->name); printf("请输入学生的学号:\n"); scanf("%d",&p->xuehao); printf("请输入学生的成绩:\n"); scanf("%d",&p->grade); if (i==0) p2=p_start=p; else { p2->next=p; p2=p; if (i==2) p->next=NULL; } } //链表的删除 p_charu=p_start; printf("请输入要删除的学号\n"); scanf("%d",&xuehao); while (1) { p_charu2=p_charu->next; if (p_charu->next->xuehao==xuehao) { p_charu->next=p_charu->next->next; free(p_charu2); break; } if (p_charu->xuehao==xuehao) { p_start=p_charu->next; free(p_charu); break; } p_charu=p->next; } } ```

c语言链表指针的指针问题

想问一下那个插入函数的类型是结构体指针的指针,输入参数是一个空指针的地址,有没有大神解释一下这个函数如何使用的呢? 还有就是如果直接用结构体指针函数,应该如何改能实现一样的功能 //学生结构体,包含数据:学号、姓名、性别、毕业学校、初试分数、复试分数 //按照学号递增插入信息 //按照学生姓名查询学号和成绩 #include <stdio.h> #include <stdlib.h> #include <string.h> // 数组结构体 typedef struct Node { int num; char name[20]; char sex[10]; char graduate_scholl[20]; int initial_score; int re_score; struct Node *next; }NODE , *PNODE; //NODE为结构体变量名,指向结构的指针 /* 相当于 typedef struct Node { ...... }NODE; //使用typedef关键字用一个单词NODE代替struct TreeNode,并定于指向该结构体类型的指针PNODE: NODE *PNODE; */ /** * 插入数字 * @param ** head 头指针地址 * @param int value 插入的数值 * @return void */ PNODE * insertValue(PNODE*head); /** * 打印数组 * @param * head 头指针 * @return void */ void printfValue(PNODE head); void check(PNODE head);//查询函数 int main(void) { PNODE head = NULL; int index; do { printf("是否录入学生数据?(0否/1是):"); scanf("%d", &index); if (index == 1) { insertValue(&head);//这里为何要这样取空指针 printf("\n\n"); printfValue(head); } } while (index == 1); check(head); return 0; } PNODE *insertValue(PNODE *head) //就是这个函数 看了好几天都没太懂 { PNODE previous = NULL; // 前一个指向地址 PNODE current = *head; // 当前指向地址 PNODE pNew = (PNODE )malloc(sizeof( NODE)); if (pNew == NULL) { printf("申请内存失败"); exit(1); } else { printf("请输入学生学号:"); scanf("%d",&pNew->num); printf("请输入学生姓名:"); scanf("%s",pNew->name); printf("请输入学生性别:"); scanf("%s",pNew->sex); printf("请输入学生毕业学校:"); scanf("%s",pNew->graduate_scholl); printf("请输入学生初试分数:"); scanf("%d",&pNew->initial_score); printf("请输入学生复试分数:"); scanf("%d",&pNew->re_score); } // currnt 不为 NULL => 数组有值 // current的值 < 待插入的值 => 转到下一个指向地址,并把当前地址存入previous。 while (current != NULL && current -> num < pNew -> num) { previous = current; //往后遍历,直到插入的值不大于当前的数 current = current -> next; } // 下一个地址内的值 > 待插入的值 => 待插入的值插入previous和current之间 pNew -> next = current; if (previous == NULL) { // previous == NULL 说明没有执行遍历循环 // 头插法 *head = pNew; } else { // previous(next) -> pNew(next) -> current previous -> next = pNew;//待插入的值插入previous之后 } return head; } void check(PNODE head) { char temp[10]; PNODE p=head; if(NULL == p) { printf("未录入信息,信息查询失败!"); } else { printf("请输入需要查询考生姓名:"); scanf("%s",temp) ; } while(p != NULL) { if(!strcmp(p->name,temp)) { printf("\n考生姓名为:%s的信息如下:\n",p->name); printf("该学生的学号为:%d\n",p->num); printf("该考生的初试成绩为:%d\n",p->initial_score); printf("该考生的复试成绩为:%d\n",p->re_score); break; } p = p->next; } } void printfValue(PNODE head) { PNODE current = head; while (current != NULL) { printf("学号:%d\n",current->num); printf("姓名:%s\n",current->name); printf("性别:%s\n",current->sex); printf("毕业学校:%s\n",current->graduate_scholl); printf("初试分数:%d\n",current->initial_score); printf("复试分数:%d\n",current->re_score); printf("\n"); current = current -> next; } printf("\n"); }

C语言链表问题怎么改错

#include <stdio.h> #include <stdlib.h> typedef struct TNode{ int data1; int data2; struct TNode *next; }*List; void CreateList(List &L,int n){ L=(List) malloc (sizeof(TNode)); L->next=null; List p; for(int i = 0;i<=n;i++){ p=(List) malloc (sizeof(TNode)); scanf("%d",&p->data1); scanf("%d",&p->data2); p->next=L->next; L->next=p; }//Create void main(){ int n; scanf("%d",&n); } 求助请问怎么改才不出错 d:\c\mutiply\mutiply1.c(10) : error C2143: syntax error : missing ')' before '&' d:\c\mutiply\mutiply1.c(10) : error C2143: syntax error : missing '{' before '&' d:\c\mutiply\mutiply1.c(10) : error C2059: syntax error : '&' d:\c\mutiply\mutiply1.c(10) : error C2059: syntax error : ')' d:\c\mutiply\mutiply1.c(29) : fatal error C1004: unexpected end of file found mutiply2.cpp d:\c\mutiply\mutiply2.cpp(12) : error C2065: 'null' : undeclared identifier d:\c\mutiply\mutiply2.cpp(12) : error C2440: '=' : cannot convert from 'int' to 'struct TNode *' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast d:\c\mutiply\mutiply2.cpp(21) : error C2601: 'main' : local function definitions are illegal d:\c\mutiply\mutiply2.cpp(26) : fatal error C1004: unexpected end of file found

c语言存储链表数据问题

给你一个链表的头指针pHead,将一个结构体中的数据,比如: struct{ int num; char name[20]; char sex[10]; } 存储到磁盘中,然后下次启动程序之后又可以读取出来。 初次学习c语言,麻烦给出代码,谢谢

C语言链表插入问题 插入节点到头节点之前去 遍历后发现只能显示插入的那个节点。

#include<stdio.h> #include<string.h> #include<stdlib.h> #include<malloc.h> struct student{ char name[10]; struct student *next; }; struct student *charu(struct student *p) { struct student *current; struct student *insert; int a; insert=(struct student*)malloc(sizeof(struct student)); char name[10]; printf("请输入你要插入的位置:"); scanf("%d",&a); printf("请输入要插入的字符:\n"); scanf("%s",name); getchar(); strcpy(insert->name,name); current=p; if(a>0) {} else if(a==0) {insert->next=current; p=insert; } return p; } void main() { struct student *head,*non,*end; char str[10],i,j; int a; head=(struct student*)malloc(sizeof(struct student)); printf("请输入名字:\n"); scanf("%s",str); getchar(); strcpy(head->name,str); printf("是否要继续输入:"); scanf("%c",&i); non=head; while(i!='n') { end=(struct student*)malloc(sizeof(struct student)); printf("请输入名字:\n"); scanf("%s",str); getchar(); strcpy(end->name,str); non->next=end; non=end; printf("是否要继续输入:"); scanf("%c",&i); } non->next=NULL; while(head!=NULL) {printf("%s\n",head->name);head=head->next;} getchar(); printf("你是否要插入字符:"); scanf("%c",&j); if(j=='y') { head=charu(head); printf("插入后的链表为:\n"); while(head!=NULL) {printf("%s\n",head->name);head=head->next;} } } 我插入一个节点第0个位置 就是头结点那个位置 插入完了以后遍历只能显示出第一个节点 这是怎么回事啊请教各位!!

c语言链表 插入,dalao进来看看呗

typedef struct book { int number; char name[20]; int jaige; }stumes; typedef struct tagnode { stumes data; struct tagnode *next; }node; node *head=NULL; void charu() { int num,i; node *p,*q; p=head; printf("请输入你要插入位置: "); scanf("%d",&num); { printf("请输入你要插入的:\n"); q=(node *)malloc(sizeof(node)); scanf("%d %s %c %d %d",&q->data.number,q->data.jaige,q->data.name); while(p!=NULL) { if(p->data.number==q->data.number) { printf("该学号已经存在,无法插入!\n"); return ; } p=p->next; } p=head; for(i=0;i<num;i++) p=p->next; q->next=p->next; p->next=q; printf("插入成功!\n"); return ; } } 编译时通过了的,应该是逻辑上出了问题。

c语言链表尾插法思路分析

![图片](https://img-ask.csdn.net/upload/201703/05/1488682196_932629.jpg)![图片](https://img-ask.csdn.net/upload/201703/05/1488682440_11686.jpg)![图片](https://img-ask.csdn.net/upload/201703/05/1488682216_1882.jpg)

c语言链表问题,求助啊

#include<stdio.h> #include<stdlib.h> typedef struct node { char name[100]; int score; struct node *next; }StudList; void CreateStudent(StudList **sl) { int n; StudList *s, *tu; sl = (StudList*)malloc(sizeof(StudList)); tu = sl; printf("学生人数:"); scanf("%d", &n); for (int i = 0; i < n; i++) { s = (StudList *)malloc(sizeof(StudList)); printf("第%d个学生姓名和成绩:", i + 1); scanf("%s-%d", s->name,&s->score); //scanf("%d", &s->score); tu->next = s; tu = s; } tu->next = NULL; } void DispList(StudList *L) { StudList *p = L->next; printf(" 名次 姓名 成绩\n"); int i = 1; while (p != NULL) { printf(" %d\t\t", i++); printf("%s\t\t", p->name);//有错 printf("%d\n", p->score); p = p->next; } } int main() { StudList *n; printf("建立学生表\n"); CreateStudent(&n); DispList(&n); system("pause"); return 0; } 大神们,我每次运行的时候都提示我注释的地方有异常,谁能帮我调一下,有赏啊,兄弟们

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语言中的链表赋值问题

我写了一个存储电影名字以及评级的链表,不理解其中以下三点 1.prev->next=current, 2.prev=current, 3.current=current->next 我目前的理解是:1.把current这个结构体指针变量的地址赋值给prev中的结构体指针变量next;2.把current这个结构体指针变量的地址赋值给结构体指针变量prev;3.令结构体指针变量current的值等于结构体指针变量next的值 不知道对吗? 以下是我的源代码: #include<stdio.h> #include<stdlib.h> //malloc();原型 #include<string.h> //strcpy();原型 #define SIZE 20 //最大字数 typedef struct film { char title[SIZE]; int rating; struct film * next; }Film; int main() { Film *head=NULL; Film *prev,*current; char title2[SIZE]; //写入 puts("Scan first title(0-20 charecter)"); while(gets(title2)!=EOF&&title2[0]!='\0') { current = (Film *)malloc(sizeof(Film)); //存第一个指针head if(head==NULL) { head=current; } //current's address 赋给next else prev->next=current; strcpy(current->title,title2); puts("Rating is...(0-10)"); scanf("%d",&current->rating); getchar(); //节点更换 puts("Enter next movie title"); prev=current; } //显示 if(head) { current=head; while(current!=NULL) { printf("the title is %s,the rating is %d\n",current->title,current->rating); current=current->next; //把下一个结构体指针的地址给current } } else puts("Not find any dota..."); //清内存 current=head; while(current) { free(current); current=current->next; } puts("OK!"); return 0; } 十分感谢

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语言链表的应用

如何将文件中的数据读入到程序中;用简单的c语言实现 例如某员工的编号 姓名 年龄 家庭住址等 求大神们解答,或者给一小段源程序 ,谢谢!!

C语言链表与文件 从文件读数据到链表里

#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() { //创建文件 FILE*fp; fp = fopen("storehouse.txt","w"); fwrite(); fclose(fp); 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"); } } } =========================== 想要读入货物信息:货物名称 货物价格 所属类型?这个怎么搞! [图片说明](https://img-ask.csdn.net/upload/201805/29/1527585662_34177.png) //函数 //1.创建链表节点 Node*create(int n,Node*L) { Node*pTail=L; L->next=NULL; Node*p; //利用尾插建立单链表 int i; for(i=1;i<=n;i++) { p=(Node*)malloc(sizeof(Node)); if(p==NULL) { printf("申请内存空间失败!\n"); } 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; } //货物显示函数 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); putchar('\n'); p=p->next; //} } }

C语言链表的一道题目 求解答

![图片说明](https://img-ask.csdn.net/upload/201912/08/1575802423_222074.png) 模板如下![图片说明](https://img-ask.csdn.net/upload/201912/08/1575803952_583527.png)

求助,关于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; }; ```

关于C语言链表的一些问题,代码怎么都运行不成功跪求大神指点

下面代码主要实现链表的创建,插入,删除,并且能将两个年龄递增链表进行合并成递减链表 然而在插入和删除操作中gets函数无法起作用,strcmp函数也出现位置冲突报错。。功力不足实在解决不了。。跪求大神解答。。(感觉自己写的东西除了上面两个错误应该还有,但是因为位置冲突问题就只能编译到那个地方无法进行下去。。我肉眼实在找不出来。。 ``` #include<stdio.h> #include<stdlib.h> #include<string.h> int a[10]={0}; int c[10]={0}; char b[100][10]; char d[100][10]; typedef struct stuInfo { char stuName[10];/*学生姓名*/ int age; /*年龄*/ } ElemType; typedef struct node { ElemType data; struct node *next; }LNode,*ListPtr;/*定义结构*/ ListPtr List_Init(int a[],char b[][10],int n){/*链表载入数据*/ LNode *s,*h; int i; h=NULL; h=(LNode*)malloc(sizeof(LNode)); h->data.age=0; memset(h->data.stuName,0,10*sizeof(char)); h->next=NULL; for(i=n-1;i>=0;i--) { s=(LNode*)malloc(sizeof(LNode));/*分配内存*/ memset(s->data.stuName,0,10*sizeof(char)); s->data.age=a[i];/*把年龄载入*/ strcpy(s->data.stuName,b[i]);/*把名字载入*/ s->next=h->next;/*新的结点指向头节点的下一个结点*/ h->next=s;/*头结点指向新的结点*/ } return h; } ListPtr List_Insert (ListPtr h, ElemType x){/*结点插入*/ LNode *s; s=(LNode*)malloc(sizeof(LNode)); s->data.age=x.age; strcpy(s->data.stuName,x.stuName);/*分配空间结点载入*/ s->next=h->next;/*新的结点指向前一个结点的后一个结点*/ h->next=s;/*前一个结点指向新结点*/ return h; } void List_Destroy(ListPtr h,ListPtr L){ LNode *s,*p; s=L->next;/*指向第一个结点*/ p=s; while(s){/*寻找所要删除的数据结点的前一个结点*/ if(s->data.age==h->data.age&&strcmp(s->data.stuName,h->data.stuName)==0) break; p=s; s=s->next; } s=p->next;/*s指定要删除的结点*/ p->next=s->next;/*前一个结点指向所要删除结点的后一个结点*/ free(s); } ListPtr List_Merge(ListPtr La, ListPtr Lb){/*链表变换,使递增链表变为递减链表,并去重*/ LNode *s, *pa, *pb; pa=La->next; pb=Lb->next;/*各指向两个链表的头结点*/ La->next=NULL; while(pa!=NULL&&pb!=NULL){ if(pa->data.age<=pb->data.age){ s=pa->next; pa->next=La->next; La->next=pa; pa=s;/*如果pa指向的年龄比pb的小则保留并逆置,pa指针指向下一个数据*/ if(strcmp(pa->data.stuName,pb->data.stuName)==0){ pb=pb->next;/*如果pa和pb所指的是同一个人,则pb也指向下一个数据,避免重复*/ } } else{ s=pb->next; pb->next=La->next; La->next=pb; pb=s; }/*如果pb指向的年龄比pa的小,则插入到La链表中*/ } while(pa!=NULL){ s=pa->next; pa->next=La->next; La->next=pa; pa=s;}/*处理La未处理的数据*/ while(pb!=NULL){ s=pb->next; pb->next=La->next; La->next=pb; pb=s;}/*处理Lb未处理的数据*/ Lb->next=NULL; free(Lb);/*释放Lb*/ } void OutPut(ListPtr La){/*输出链表*/ LNode *s; s=La->next; while(s){ printf("%s\t%d\n",s->data.stuName, s->data.age); } } int main(){ ElemType x; int n,i,j; ListPtr La=NULL, Lb=NULL; LNode *p,*r; for(i=0;i<10;i++){ memset(b[i],0,10*sizeof(char)); memset(d[i],0,10*sizeof(char)); }/*初始化字符串数组*/ strcpy(b[0],"Levis");a[0]=22; strcpy(b[1],"Adam");a[1]=23; strcpy(b[2],"Lord");a[2]=26; strcpy(b[3],"Fred");a[3]=28; strcpy(b[4],"May");a[4]=30; strcpy(b[5],"York");a[5]=35; La=List_Init(a, b, 6); /*La数据载入*/ strcpy(d[0],"Yuki");c[0]=19; strcpy(d[1],"Soraru");c[1]=27; strcpy(d[2],"Katin");c[2]=29; strcpy(d[3],"Sinsan");c[3]=31; strcpy(d[4],"York");c[4]=35; Lb=List_Init(c, d, 5); /*Lb数据载入*/ printf("choose operation: 1. insert 2. delete 3.nothing: "); scanf("%d",&j); if(j==1){ printf("enter the student's name you want to insert:");/*插入数据操作*/ gets(x.stuName); printf("enter the student's age:"); scanf("%d",&x.age); p=La->next; while(p){/*查找La中是否有此人*/ if(strcmp(p->data.stuName,x.stuName)==0) break; p=p->next; } if(p=NULL){/*如果没则寻找插入位置*/ p=La->next;r=p; while (p){ if(x.age<=p->data.age) break; r=p; p=p->next;/*找到比它大的值后,r记录此结点的前一个结点*/ } List_Insert (r, x);/*在r后插入此数据结点*/ } else{ p=Lb->next;/*La中已有此人,则查找Lb*/ while(p){ if(strcmp(p->data.stuName,x.stuName)==0) break; p=p->next; } if(p=NULL){ p=Lb->next;r=p; while (p){ if(x.age<=p->data.age) break; r=p; p=p->next; } List_Insert (r, x);}}/*同La*/ if(p!=NULL){ printf("inserted fail");}/*如果两链表中已有此人,则表示插入失败*/ } if(j==2){ printf("enter the student's name you want to delete:");/*进行删除操作*/ gets(x.stuName); printf("which lianbiao do you choose, if La, input 1;Lb,input 2:");/*选择要插入的链表*/ scanf("%d",&i); if(i==1){ p=La->next; while(p){ if(strcmp(p->data.stuName,x.stuName)==0)/*查找La中此人的位置*/ break; p=p->next;/*移动到下一个结点*/ } if(p!=NULL){ List_Destroy(p,La);} else {printf("查无此人");}/*移动到下一个结点*/ } if(i==2){ p=Lb->next; while(p){ if(strcmp(p->data.stuName,x.stuName)==0) break; p=p->next; } if(p!=NULL){List_Destroy(p,Lb);} else {printf("查无此人");}}/*同La*/ } printf("now ranking......\n");/*显示递增合并为递减的信息*/ List_Merge(La, Lb); OutPut(La);/*输出函数*/ return 0; } ``` 然而在插入和删除操作中gets函数无法起作用,strcmp函数也出现位置冲突报错。。功力不足实在解决不了。。跪求大神解答。。(感觉自己写的东西除了上面两个错误应该还有,但是因为位置冲突问题就只能编译到那个地方无法进行下去。。我肉眼实在找不出来。。

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

今年,我也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站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

立即提问
相关内容推荐