c语言实现删除操作的方法

问题:实现删除字符串中连续的重复字符(不包括字母和数字)。 输入为字符串,将字符串中连续重复的,非字母和数字的字符删去,然后输出处理后的字符串。要求用指针指向输入的字符串进行操作。

要求:输入字符串最长50个字符,只输出处理后的字符串。

比如:输入:3+++7==10

输出3+7=10

麻烦各位大神帮忙解决,谢谢!

1个回答

之前的回答 https://ask.csdn.net/questions/769884 是否解决了,如果没有请留言,解决请采纳

#include <stdio.h>
#include <stdlib.h>
void deldup(char * s)
{
    int dp = 0;
    for (int i = 0; i < strlen(s); i++)
    {
        if (s[i] != s[dp])
            s[++dp] = s[i];
    }
    s[++dp] = '\0';
}

int main()
{
    char s[51];
    scanf("%s", &s[0]);
    deldup(s);
    printf("%s", s);
    return 0;
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c语言实训课程选修管理系统
1.题目描述 编写一个程序对学生的课程选修进行管理。系统能实现以下功能:  添加:添加课程或学生记录,可提供选择所要添加类别的选择界面,要求编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加;  查询:可根据编号、姓名等信息对已有的学生或课程基本信息进行查询;查询选修某门课程的学生;查询某学生学期选修的课程;如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。可提供选择界面供用户选择;  显示:可显示已有学生或课程的信息,每条记录占据一行;  编辑:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性;  删除:对已有的学生或课程记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作;  统计:能根据多种参数进行统计。如能统计某学期开设的课程数,选修某门课程的实际学生人数,选修某门课程的男女生比例,某门课程的平均成绩,某学生学期选修的课程数等;  排序:能根据多种参数进行排序。如对某门课程按实际选修人数升序/降序排序,对某门课程按学生成绩升序/降序排序等;  保存:将当前系统中各类记录存入文件中,存入方式任意;  读取:可将保存在文件中的信息读入到当前系统中,供用户使用。 2.设计提示 (1)学生基本信息包括:学号、班级、姓名、性别、联系方式等信息。课程基本信息包括:课程代码、课程名称、课程性质、总学时、学分、开课学期、选修人数等信息; (2)划分实现课程选修管理的功能模块:如主菜单、添加、修改、查询、统计、保存等功能,并确定各功能模块的实现算法; (3)确定课程选修的数据结构,至少应包括课程代码、学号和课程成绩等; (4)画出主要算法的流程图; (5)选择C语言的技术:普通数组、结构体数组、函数、指针、单链表或文件等; (6)编写程序代码。
一、 创建一个字符单链表,实现对字符的插入、删除、查找、元素个数的统计等基本操作,要求为用户提供选择式菜单?
C语言 数据结构 一、 创建一个字符单链表,实现对字符的插入、删除、查找、元素个数的统计等基本操作,要求为用户提供选择式菜单。
C语言怎么通过操作语句来实现操作
运行的时候,在dos框输入语句然后实现相应功能。。比如我输入addstudent 11这么一个语句就是添加了一个学号为11号的学生,再比如输入deletestudent 12就是删除学号为12的学生等等
请用C++语言帮忙完善以下程序(单链表的实现)
#include <iostream> #include <stdlib.h> using namespace std; typedef int ElemType; // 结点定义 struct Node { // 数据成员: ElemType data; // 数据域 struct Node *next; // 指针域 }; // 单链表类定义 class LinkList { private: struct Node *head; // 头结点指针 public: //线性链表方法声明: LinkList(); virtual ~LinkList( ); void CreateListTail( ); void CreateListHead( ); void CreateListOrder(); void DeleteElem(ElemType e); void Insert(int position, ElemType e); void DeletePos (int position); void Traverse(); }; //构造函数,初始化单链表,创建头结点 LinkList::LinkList() { head=(Node*)malloc(sizeof(Node)); head->next=NULL; cout<<"单链表表初始化成功"<<endl; //return 1; } //析构函数 LinkList::~LinkList() { head=NULL; //return 0; } //用尾插法构造单链表,新结点插入在单链表尾结点之后 //用户依次输入多个数据元素,直到输入0结束 void LinkList::CreateListTail( ) { } //用头插法构造单链表,新结点插入在单链表头结点之后 //用户依次输入多个数据元素,直到输入0结束 void LinkList::CreateListHead( ) { } //构造有序单链表,初始时单链表为空,将元素按照值大小,从小到大插入到链表中 //用户依次输入多个数据元素,直到输入0结束 void LinkList::CreateListOrder() { } //删除单链表中值为e的结点,成功输出“已删除e元素”, //失败则输出原因(栈为空,或者未找到e元素 void LinkList::DeleteElem(ElemType e) { } //删除单链表中位于position位置的结点,成功输出“已删除第position个元素”, //失败则输出原因(栈为空,或者未找到第position个元素 void LinkList::DeletePos (int position) { } //在单链表position位置插入元素e void LinkList::Insert(int position, ElemType e) { } //遍历单链表,将单链表数据元素依次输出 void LinkList::Traverse() { if (head->next == NULL) { cout << "链表为空表" << endl; } struct Node *p = head->next; while (p!= NULL) { cout << p->data << " "; p = p->next; } } int main(void) { LinkList lk1,lk2,lk3; int c = 0; int position; ElemType elem; while (c != 7) { cout << endl << "1. 头插法创建单链表"; cout << endl << "2. 尾插法创建单链表"; cout << endl << "3. 在单链表中插入元素"; cout << endl << "4. 在单链表中删除elem元素"; cout << endl << "5. 在单链表中删除第position个元素"; cout << endl << "6. 构造有序单链表"; cout << endl << "7. 退出"; cout << endl << "选择功能(1~7):"; cin >> c; switch (c) { case 1: lk1.CreateListHead( ); lk1.Traverse(); break; case 2: lk2.CreateListTail( ); lk2.Traverse(); break; case 3: cout<<"请输入插入位置:"<<endl; cin>>position; cout<<"请输入要插入的数据:"; cin>>elem; lk1.Insert(position, elem); lk1.Traverse(); break; case 4: cout<<"请输入要删除的数据:"; cin>>elem; lk1.DeleteElem(elem); lk1.Traverse(); break; case 5: cout<<"请输入删除元素的位置:"<<endl; cin>>position; lk1.DeletePos(position); lk1.Traverse(); break; case 6: lk3.CreateListOrder( ); lk3.Traverse(); break; case 7: cout<<"结束操作"<<endl; lk1.~LinkList(); lk2.~LinkList(); lk3.~LinkList(); break; } } } ``` ```
C语言数据结构二叉树-目录树的基本操作求解?
**_数据结构作业题_** **计算机目录树的基本操作(设计性实验)** [问题描述] 对计算机中的目录树实现:建立目录、修改目录结构、查询和删除等操作。 [基本要求] (1)按二叉链表的存储方式存储计算机中的目录树; (2)实现目录树的建立和遍历及插入结点和删除结点操作。 [测试数据] 由读者依据软件工程的测试技术自己确定。注意测试边界数据。 [实现提示] (1)根据树与二叉树的对应关系,对树的操作最终以对二叉树的操作实现; (2)查询操作可以实现是否存在某目录或查询指定目录的父目录或子目录。 [思考题] 如果引入Windows 系统中的快捷方式,该如何处理?
初学c语言,可以评价一下我写的顺序表吗?
望各位批评指教,十分感谢。 ``` #include <stdio.h> #include <stdlib.h> #define INITSIZE 100 typedef struct { int * data; //声明一个动态数组 int length; //记录当前顺序表的长度(实际长度) int MaxSize; //顺序表的最大长度 }SqList; /* 初始化顺序表,调用InitList()函数可以创建一个空的顺序表 */ void InitList(SqList *L) { (*L).data = (int*)malloc(INITSIZE*sizeof(int)); //构造新的顺序表并为顺序表分配空间 (*L).length = 0; //空表的长度为0; (*L).MaxSize = INITSIZE; //空表的初始存储空间为INITSIZE } /* 输出打印顺序表 */ void PrintList(SqList *L) { for(int i=0;i<(*L).length;i++) { printf("%4d",(*L).data[i]); } printf("\n"); } /* 顺序表插入操作 将给定值e插入到顺序表的第i个位置 */ void InsertList(SqList *L,int e,int i) { //判断i的范围是否合法 if(i<1||i>(*L).MaxSize) { printf("插入位置有问题。\n"); return; } //判断顺序表是否已满 if((*L).length==(*L).MaxSize) { printf("顺序表已满,无法插入\n"); return; } //执行插入操作。将第i个位置及其后的元素后移 for(int j=(*L).length-1;j>=i;j++) { (*L).data[j+1] = (*L).data[j]; } //然后将待插入的元素放入第i个位置,由于数组下标是从0开始,所以第i的位置的元素下标应该是i-1 (*L).data[i-1] = e; //顺序表长度加一 (*L).length++; } /* 顺序表删除操作 删除顺序表上第i个位置上的元素 */ void DeleteList(SqList *L,int i) { //判断i的范围是否合法 if(i<1||i>(*L).MaxSize) { printf("删除位置有问题。\n"); return; } //将顺序表中第i个之后的元素前移,把第i的位置上原有的元素覆盖掉,实现删除 for(int j=i-1;j<(*L).length;j++) { (*L).data[j] = (*L).data[j+1]; } //顺序表长度加一 (*L).length--; } /* 顺序表查找操作 按位查找 查找顺序表上第i个位置上的元素 */ void SearchList_1(SqList (*L),int i) { //判断i的范围是否合法 if(i<1||i>(*L).length) { printf("查找的位置有问题。\n"); return; } printf("顺序表上第%d个元素为:%d\n",i,(*L).data[i-1]); } /* 顺序表查找操作 按值查找 查找给定值在顺序表中的位置 */ int SearchList_2(SqList *L,int e) { for(int i=0;i<(*L).length;i++) { if((*L).data[i]==e) return i+1; } printf("查找失败\n"); return -1; } /* 顺序表修改操作 修改顺序表第i个位置上的元素修改为新的值e */ void ChangeList(SqList *L,int i,int e) { //判断i的范围是否合法 if(i<1||i>(*L).length) { printf("需要修改的位置有问题。\n"); return; } (*L).data[i-1] = e; } /* 主函数 */ int main() { SqList *L; //初始化线性表 InitList(&L); //往顺序表中插入元素 InsertList(&L,12,1); InsertList(&L,24,2); InsertList(&L,38,3); InsertList(&L,45,4); InsertList(&L,52,5); InsertList(&L,69,6); InsertList(&L,73,7); //输出打印顺序表中所有元素 printf("原顺序表:"); PrintList(&L); //查找 printf("查找顺序表中第3个元素:");SearchList_1(&L,3); printf("69是顺序表中第%d个元素\n",SearchList_2(&L,69)); //删除线性表中元素 printf("删除第二个元素\n"); DeleteList(&L,2); printf("删除之后的顺序表:"); PrintList(&L); //修改顺序表的元素 printf("将顺序表中第3个元素修改为100\n"); ChangeList(&L,3,100); printf("一顿操作之后的顺序表:"); PrintList(&L); return 0; } ```
C语言fopen打开文件失败
一个单链表创建学生信息的作业,要求要用文件的输入输出。 打全部路径会出现如图的错误。 打“C:\\\student_info.txt”也不行。 把文件移到project8的文件夹下面打“student_info.txt”也不行。 已确定文件在文件夹内是存在的。F11调试确定就是fopen那块儿出的问题 求问怎么改......崩溃 ![图片说明](https://img-ask.csdn.net/upload/201912/04/1575461393_230930.png) #define _CRT_SECURE_NO_DEPRECATE #include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int ElemType; typedef int Status; FILE *fp; /*①单链表数据结构定义*/ typedef struct { int num; //学号 //char name[20]; //姓名 //int sex; //性别 //int dorm; //宿舍 //int tel; //电话 }Student; //结点定义 typedef struct LNode { Student data; struct LNode *next; }LNode; //链表定义 typedef struct { LNode* head; //指向头结点的指针 int length; //链表长度 }LinkList; /*②单链表基本操作接口定义*/ //初始化链表:创建头结点,给L字段赋初值 //返回一个空的单链表 Status InitList(LinkList &L); //初始条件:线性表L已经初始化 //采用头插法创建一个单链表,元素类型为整形,输入-9999时结束 Status CreateFromHead(LinkList &L); //初始条件:线性表L已经初始化 //采用尾插法创建一个单链表,元素类型为整形,输入-9999时结束 Status CreateFromTail(LinkList &L); //初始条件:线性表L已经存在 //打印出所有元素 void PrintElem(LinkList L); //初始条件:线性表L已经存在 //查找第i个结点,若找到(1≤i≤n),则由e返回其值 Status GetElem_L(LinkList L, int i, ElemType &e); //初始条件:线性表L已经存在 //在单链线性表L的第i个元素之前插入元素e Status ListInsert_L(LinkList &L, int i, ElemType e); //初始条件:线性表L已经存在 //删除第i个元素,并由e返回其值 Status ListDelete_L(LinkList &L, int i, ElemType &e); int main() { LinkList L; InitList(L); CreateFromHead(L); PrintElem(L); system("pause"); } /*③部分单链表操作的实现函数*/ Status InitList(LinkList &L) //初始化链表 { L.head = (LNode*)malloc(sizeof(LNode)); if (!L.head)exit(OVERFLOW); L.length = 0; L.head->next = NULL; return OK; } //初始条件:线性表L已经初始化 //采用头插法创建一个单链表,元素类型为整形,输入-9999时结束 Status CreateFromHead(LinkList &L) { LNode *s; int flag = 1; int e; L.head = (LNode*)malloc(sizeof(LNode)); L.head->next = NULL; while (flag) { fp = fopen("C:\Users\解诗雨\source\student_info.txt", "r+"); if (fp==NULL) { printf("打不开\n"); return OK; } fscanf(fp,"%d", &e); if (e) { s = (LNode*)malloc(sizeof(LNode)); s->data.num = e; s->next = L.head->next; L.head->next = s; ++L.length; } else flag = 0; fclose(fp); } return OK; } //初始条件:线性表L已经存在 //打印出所有元素 void PrintElem(LinkList L) { LNode* p; p = L.head->next; printf("当前的结点数为:%d\n", L.length); while (p) { printf("%4d ", p->data.num); p = p->next; } printf("\n"); } 文本: ![图片说明](https://img-ask.csdn.net/upload/201912/04/1575462569_672809.png) 因为现在还在创建链表其他还没弄完...
线性表结构的实现,内心迷乱,希望能得到帮助
#include<stdio.h> #include <stdlib.h> #define ERROR 0 #define OK 1 typedef int Status; typedef int Elemtype; typedef struct node { Elemtype elem[LIST_SIZE]; int length; }Sqlist; typedef int Elemtype; typedef int Status; typedef struct LNode{ Elemtype data; struct LNode *next; }LNode,*Linklist; Status LengthList(Linklist *L); Status create(Sqlist *L,int n); Status Findlen1(Sqlist *L); Elemtype GetElem(Sqlist *L, int n); int LocateElem(Sqlist *L, int n); Status ListInsert_Sq(Sqlist *L,int i,int x); Status LisDele_Sq(Sqlist *L,int i); int Printlist(Sqlist* L); Status Init_linklist(Linklist *L); void Creat_Linklist(Linklist *L,int n); Status LengthList(Linklist *L); Status Get_Linklist(Linklist *L,int i,Elemtype *e); Status Locate_Linklist(Linklist *L,Elemtype e); Status Insert_Linklist(Linklist *L,int i,Elemtype e); Status Delete_Linklist(Linklist *L,int i,Elemtype *e) ; void Display(Linklist *L) ; void menu1(); void menu2(); int main() { int x; while(1) { system("cls"); printf("\n\n\n\n\n\n\n\n"); printf("\t\t\t\t\t1:顺序表\n"); printf("\t\t\t\t\t2:链表\n"); printf("\t\t\t\t\t3:退出\n"); printf("\n\t\t\t\t\t请输入您的选择(1-3)=:"); scanf("%d",&x); switch(x) { case 1:menu1(); break; case 2:menu2(); break; case 3:return 0;break; default:printf("error");return 1; break; } printf("\n"); system("pause"); } return 0; } Status create(Sqlist *L, int n) { int i; if(n>LIST_SIZE) return ERROR; for(i=0;i<n;i++) { printf("请输入第%d个数据的值:", i+1); scanf("%d", &L->elem[i]); } L->length=n; return OK; } Status Findlen1(Sqlist *L) {return (L->length);} Elemtype GetElem(Sqlist *L, int n) { { if (n<1 || n>L->length) { return ERROR; } return L->elem[n - 1]; } } int LocateElem(Sqlist *L, int n) //4 {int i; for(i=0;i<=L->length;i++) if(L->elem[i]==n) return i+1; else return 0; } Status ListInsert_Sq(Sqlist *L,int i,int x) //5 {int j; if (i<1||i>L->length +1) return ERROR; if(L->length>100) return ERROR; for(j=L->length-1;j>=i-1;j--) L->elem[j+1]=L->elem[j]; L->elem[i-1]=x; ++(L->length); return OK; } Status LisDele_Sq(Sqlist *L,int i) //6 {int j; if ((i<1)||(i>L->length)) return ERROR; for(j=i;j<=L->length-1;j++) L->elem[j-1]=L->elem[j]; --L->length; return OK; } int Printlist(Sqlist* L) //7 { int j; for (j = 0; j <= L->length - 1; j++) { printf("第%d个数据为%d\n", j + 1, L->elem[j]); } return OK; } Status Init_linklist(Linklist *L) { *L=(Linklist)malloc(sizeof(LNode)); if(!(*L)) { return ERROR; } (*L)->next=NULL; return OK; } void Creat_Linklist(Linklist *L,int n) { Linklist p,q; int i; p = *L; for(i=0;i<n;i++) { printf("请输入链表第%d个元素:",i); q=(Linklist)malloc(sizeof(LNode)); scanf("%d",&q->data); p->next=q; p=q; } p->next=NULL; } Status LengthList(Linklist *L) { int i=0; Linklist p,q; p = *L; if(p->next==NULL) return ERROR; while(p->next!=NULL) { i++; p=p->next; } return i; } Status Get_Linklist(Linklist *L,int i,Elemtype *e) { int j=1; Linklist p,q; p = *L; if(i<1||!p->next||i>LengthList(L)) { return ERROR; } while(j<=i&&p) { p=p->next; j++; } if(j-1==i) { *e=p->data; return OK; } else return ERROR; } Status Locate_Linklist(Linklist *L,Elemtype e) { int i=1; Linklist p,q; p = (*L)->next; while(p->data!=e&&p) { p=p->next; i++; } if(p->data!=e) return -1; else return i; } Status Insert_Linklist(Linklist *L,int i,Elemtype e) { int j=1; Linklist p,q; p = *L; if(i<1||!p->next||i>LengthList(L)) { return ERROR; } while(p&&j<i) { p=p->next; j++; } q=(Linklist)malloc(sizeof(LNode)); q->data=e; q->next=p->next; p->next=q; return OK; } Status Delete_Linklist(Linklist *L,int i,Elemtype *e) { int j=1; Linklist p,q; p = *L; if(i<1||!p->next||i>LengthList(L)) { return ERROR; } while(j<i&&p->next) { p=p->next; j++; } q=p->next; *e=q->data; p->next=q->next; free(q); return OK; } void Display(Linklist *L) { LNode *p; p=(*L)->next; while(p) { printf("%d ",p->data); p=p->next; } printf("\n"); } menu1() { int y,n; Sqlist L; Status T; while(1) { system("cls"); printf("\n\n\n\n\n\n\n\n"); printf("\t\t\t\t\t1:创建顺序线性表\n"); printf("\t\t\t\t\t2:求顺序线性表的长度\n"); printf("\t\t\t\t\t3:按序号取顺序表元素\n"); printf("\t\t\t\t\t4:按值查找顺序表\n"); printf("\t\t\t\t\t5:插入元素\n"); printf("\t\t\t\t\t6:删除元素\n"); printf("\t\t\t\t\t7:输出顺序线性表\n"); printf("\t\t\t\t\t8:返回\n"); printf("\t\t\t\t\t\t请输入您的选择(1-8)=:"); scanf("%d",&y); if(y==8) break; switch(y) { case 1: system("cls"); printf("请输入你要创建的线性表的长度:"); scanf("%d",&n); T=create(&L,n); if(T==ERROR) printf("创建失败,线性表长度超限!!"); else printf("创建线性表成功!!"); system("pause"); break; case 2:system("cls"); Status a; a=Findlen1(&L); printf("您所建线性表长度为%d\n",n); system("pause"); break; case 3:system("cls"); int b; printf("请输入你想找的数据的序号: "); scanf("%d", &n); b = GetElem(&L, n); printf("该序号的数据为%d\n", b); system("pause"); break; case 4:system("cls"); printf("请输入你想找的值:"); scanf("%d", &n); b=LocateElem(&L,n); if (b == 0) printf("线性表中没有该值\n"); else printf("该值在线性表中的第%d位\n", b); system("pause"); break; case 5:system("cls"); int C;int x; printf("请输入你想在哪一个元素前面插入:"); scanf("%d",&n); printf("请输入你想插入的数据:"); scanf("%d",&x); C= ListInsert_Sq(&L,n,x); if(C==1) printf("插入成功"); else printf("插入失败"); system("pause"); break; case 6:printf("请输入您想删除的数字:"); scanf("%d",&n); C=LisDele_Sq(&L,n); if(C==1) printf("删除成功"); else printf("删除失败"); system("pause");break; case 7:system("cls"); Printlist(&L); system("pause"); break; default:printf("error"); break; } printf("\n"); system("pause"); } return 1; } menu2(){ int z; while(1) { system("cls"); printf("\n\n\n\n\n\n\n\n"); printf("\t\t\t\t\t1:创建链式线性表\n"); printf("\t\t\t\t\t2:求链式线性表的长度\n"); printf("\t\t\t\t\t3:按序号取链表元素\n"); printf("\t\t\t\t\t4:按序号取链表元素\n"); printf("\t\t\t\t\t5:插入元素\n"); printf("\t\t\t\t\t6:删除元素\n"); printf("\t\t\t\t\t7:输出链式线性表\n"); printf("\t\t\t\t\t8:返回\n"); printf("\t\t\t\t\t\t请输入您的选择(1-8)=:"); scanf("%d",&z); if(z==8) break; switch(z) { case 1: printf("这里是创建链式线性表"); int n,num,e,value; Linklist L; value=Init_linklist(&L); if(value) printf("单链表初始化成功!\n"); else return ERROR; printf("请输入单链表的长度:") ; scanf("%d",&n); Creat_Linklist(&L,n); printf("单链表中各元素的值为:"); Display(&L);break; case 2:printf("这里是求链式线性表的长度"); break; case 3: int n,num,e,value; printf("这里是按值取链表元素"); printf("\n\n请输入要查找的值e= "); scanf("%d",&num); value=Locate_Linklist(&L,num); if(value>0) printf("该元素在线性表的位序位:%d",value); else printf("\n无该值,查找失败!"); break; case 4: int n,num,e,value; printf("这里是按序号取链表元素"); printf("\n\n请输入要查找的位置:"); scanf("%d",&n); value=Get_Linklist(&L,n,&e); if(value) printf("单链表中第%d位的值为%d",n,e); else printf("\nerror!") ; break; case 5: int n,num,e,value; printf("这里是插入元素"); printf("\n请输入插入的位置:"); scanf("%d",&n); printf("请输入插入的元素:"); scanf("%d",&num); Insert_Linklist(&L,n,num); printf("进行插入操作后\n单链表中各元素的值为:"); Display(&L);break; case 6: int n,num,e,value; printf("这里是删除元素"); printf("\n\n请输入删除的位置:"); scanf("%d",&n); Delete_Linklist(&L,n,&e); printf("被删除元素的值为:%d",e); printf("\n进行删除操作后\n单链表中各元素的值为:"); Display(&L); break; case 7:printf("这里是输出链式线性表"); printf("单链表中各元素的值为:"); Display(&L);break; default:printf("error"); break;} printf("\n"); system("pause"); return 1; } }
C语言顺序表基本操作,刚学数据结构还不懂怎么操作?求助!!
1、建立一个顺序表,要求从键盘输入10个整数,并将该顺序表的元素从屏幕显示出来。 2、用函数实现在顺序表中查找其中一个元素,如果找到,返回该元素在顺序表中的位置和该元素的值,否则提示无此元素。 3、用函数实现顺序表的插入和删除操作。由用户输入待插入元素及插入位置,将完成插入后的顺序表输出;由用户输入删除第几个元素,将完成删除后的顺序表输出。
线性表的应用,学生成绩管理管理
学生成绩管理管理,要求如下: 学生某学期学习有三门课程:高等数学、英语、数据结构,学生信息有姓名及学号。要求输入每个学生的信息及各门课程的成绩。然后分别完成如下操作: 1) 按照总成绩由高到低输出学生信息及各科成绩及总成绩; 2) 按照原始输入顺序输出删除不及学生的学生信息及学习成绩; 程序设计要求: 首先定义适合这个问题的抽象数据类型线性表 然后基于抽象数据类型线性表写出完成任务的算法 最后以某种语言实现上述程序。
pta上的一道题,有一个段错误,望大神指错,谢谢!
题目:本题要求实现多个函数完成对链表的各项基本操作:创建链表,按要求查找,在指定位置添加结点,删除结点,链表排序,输出链表等操作。 链表中为若干个学生的信息(学号、成绩),当输入学号为0时结束;查找并输出不及格的学生信息;新增一个学生信息到指定的学号前面;将指定学号的学生从链表中删除。 将链表中的学生信息按照分数降序排序。 函数接口定义: Stu * Creatlink( ); void Printlink(Stu * head); void Search(Stu * head); Stu *Delnode(Stu * head,int n); Stu * Addnode(Stu * head,int n); Stu *Sortnode(Stu * head); 裁判测试程序样例: ``` #include <stdio.h> #include <stdlib.h> #define LEN sizeof(struct stu) struct stu { int num; float score; struct stu *next; }; typedef struct stu Stu; Stu *Creatlink(); void Printlink(Stu *head); void Search(Stu *head); Stu *Delnode(Stu *head,int n); Stu *Addnode(Stu *head,int n); Stu *Sortnode(Stu *head); int main() { Stu *head = NULL; int num; head = Creatlink(); if(head !=NULL) Printlink(head); else { printf("Empty list\n"); return 0; } printf("The student no pass:\n"); Search(head); scanf("%d",&num); head=Delnode(head,num); if(head !=NULL) { printf("After delete the student:\n"); Printlink(head); } else { printf("After delete:empty list\n"); return 0; } scanf("%d",&num); head=Addnode(head,num); printf("After add the student:\n"); Printlink(head); head = Sortnode(head); printf("After sorted:\n"); Printlink(head); return 0; } ``` /* 请在这里填写答案 */ 输入样例: 2,58 3,69 4,98 5,45 6,30 9,80 11,40 0,0 6 9 7,88 输出样例: 2,58 3,69 4,98 5,45 6,30 9,80 11,40 The student no pass: 2,58 5,45 6,30 11,40 After delete the student: 2,58 3,69 4,98 5,45 9,80 11,40 After add the student: 2,58 3,69 4,98 5,45 7,88 9,80 11,40 After sorted: 4,98 7,88 9,80 3,69 2,58 5,45 11,40 我的代码: ``` Stu * Creatlink( ) { Stu *head = NULL, *cur = NULL, *tail = NULL; tail = cur = (Stu *)malloc (LEN); scanf ("%d,%f", &cur->num, &cur->score); while (cur->num != 0 && cur->score != 0) { if (head == NULL) head = cur; else tail->next = cur; tail = cur; cur = (Stu *)malloc (LEN); scanf ("%d,%f", &cur->num, &cur->score); } tail->next = NULL; return head; } void Printlink(Stu * head) { Stu *p; p = head; while (p) { printf ("%d,%.0f\n", p->num, p->score); p = p->next; } } void Search(Stu * head) { Stu *p = head; while (p != NULL) { if (p->score < 60) printf ("%d,%.0f\n", p->num, p->score); p = p->next; } } Stu *Delnode(Stu * head,int n) { Stu *p = head, *q = NULL; while (n != p->num && p != NULL) { q = p; p = p->next; } if (n == p->num) { if (p == head) head = p->next; else q->next = p->next; } else return NULL; return head; } Stu * Addnode(Stu * head,int n) { Stu *p = head, *q = NULL, *temp = NULL; q = (Stu *) malloc (LEN); scanf ("%d,%f", &q->num, &q->score); while (n != p->num && p != NULL) { temp = p; p = p->next; } q->next = temp->next; temp->next = q; return head; } Stu *Sortnode(Stu * head) { Stu *p = head, *q = head; int M; float m; while (p != NULL) { q = p; while (q != NULL) { if (p->score < q->score) { m = p->score; p->score = q->score; q->score = m; M = p->num; p->num = q->num; q->num = M; } q = q->next; } p = p->next; } return head; } ``` 有一个段错误,不知道该如何处理
谁能帮我用C语言编一个学生信息管理系统
用C语言实现线性表的基本操作,能创建一个基于学生信息管理的链表,至少包含数据输入、数据输出、数据处理等操作。在主函数里能实现以下功能。 运行后出现一个选择提示。 可选择的功能有1)创建新的学生信息链表 2)增加一个新的学生信息 3)按学号删除某个学生信息 4)按学号查找某个学生信息 5)可以按照学生成绩对链表排序 6)退出系统 补充功能:基础较好的同学可以定义一个SAVE函数保存成score.txt,和一个display函数打开该文件,学生信息要含有学号,姓名,三门成绩,还要计算总分和平均成绩
学生成绩管理 C语言数据结构
学生成绩管理可以实现班级学生成绩的添加,最低分、最高分查找,学生成绩删除等功能。请使用带头节点的单链表实现学生成绩管理的功能 程序中已经给出链表节点,操作函数的定义和main函数。请完成InsertAhead(),DisplayMinAndMaxScore(),DeleteScore(),DeleteScoreBetweenNM(),DisplayList()函数代码编写,实现函数要求的功能。 ``` #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include<stdlib.h> typedef struct LLNode //链表节点的定义 { int score; struct LLNode * next; }LLNode, *ListNodePtr; int InitialLinkList(ListNodePtr &LL);//链表初始化 int InsertAhead(ListNodePtr &LL, int N);//接收输入的N以及N个学生的成绩,采用头插法依次添加到链表中 int DisplayMinAndMaxScore(ListNodePtr &LL);//显示学生成绩的最低分和最高分,如果链表为空,显示字符“NO”,显示结束后换行 int DeleteScore(ListNodePtr &LL, int k);//删除链表中第K个学生的成绩,释放节点 int DeleteScoreBetweenNM(ListNodePtr &LL, int N, int M);//删除链表中成绩介于[N M]的节点(N<=M) int DisplayList(ListNodePtr &LL);//显示链表中所有学生的成绩,以空格分隔 int main() { int op = 0, N = 0, M = 0, K = 0; ListNodePtr ScoreList = NULL;//ScoreList是指向链表头节点的指针 if (!InitialLinkList(ScoreList)) return 0; scanf("%d", &op); //接收每行第一个负数,代表一种操作 while (op >= -5 && op <= -1) { switch (op) { case -1: //接收输入的N以及N个学生的成绩,采用头插法依次添加到链表中 scanf("%d", &N); InsertAhead(ScoreList, N); break; case -2: //显示学生成绩的最低分和最高分 DisplayMinAndMaxScore(ScoreList); break; case -3: //显示链表中所有学生的成绩,以空格分隔 DisplayList(ScoreList); break; case -4: //删除链表中第K个学生的成绩,释放节点 scanf("%d", &K); DeleteScore(ScoreList, K); break; case -5://删除链表中成绩介于[N M]的节点(N<=M) int N = 0, M = 0; scanf("%d%d", &N, &M); DeleteScoreBetweenNM(ScoreList, N, M); break; } scanf("%d", &op); } return 0; } int InitialLinkList(ListNodePtr &LL)//链表初始化 { LL = (ListNodePtr)malloc(sizeof(LLNode)); if (!LL) return 0; LL->next = NULL; return 1; } // 在此处补充你的代码 ``` 等一个老哥帮帮小白,自己敲出来的全是错
求大家帮我看看这个队列问题,我要崩了啊啊啊啊
本人大一小白,今天做pta的一道队列问题,我真是崩溃了啊啊啊,求大神救救孩子吧!!! 双端队列(deque,即double-ended queue的缩写)是一种具有队列和栈性质的数据结构,即可以(也只能)在线性表的两端进行插入和删除。若以顺序存储方式实现双端队列,请编写例程实现下列操作: Push(X,D):将元素X插入到双端队列D的头; Pop(D):删除双端队列D的头元素,并返回; Inject(X,D):将元素X插入到双端队列D的尾部; Eject(D):删除双端队列D的尾部元素,并返回。 https://pintia.cn/problem-sets/434/problems/6096网站 下面是我写的两个答案,第一个答案错误,头指针指向头一个元素的前一个位置;第二个答案全对,尾指针指向最后一个元素的后一个位置,我感觉第一个答案没问题啊,已经有点崩溃了 第一个错误的//头指针指向头一个元素的前一个 bool Push(ElementType X, Deque D) { if ((D->Rear + 1) % D->MaxSize == D->Front) return false; D->Data[D->Front] = X; D->Front = (D->Front + D->MaxSize - 1) % D->MaxSize; //避免出现负数 return true; } ElementType Pop(Deque D) { if (D->Rear == D->Front) return ERROR; D->Front = (D->Front + 1) % D->MaxSize; return D->Data[D->Front]; } bool Inject(ElementType X, Deque D) { if ((D->Rear + 1) % D->MaxSize == D->Front) return false; D->Rear = (D->Rear + 1) % D->MaxSize; D->Data[D->Rear] = X; return true; } ElementType Eject(Deque D) { if (D->Rear == D->Front) return ERROR; ElementType temp = D->Data[D->Rear]; D->Rear = (D->Rear + D->MaxSize - 1) % D->MaxSize; //避免出现负数 return temp; } 第二个正确的 //尾指针指向最后一个元素的后一个 bool Push(ElementType X, Deque D) { if ((D->Rear + 1) % D->MaxSize == D->Front) return false; D->Front = (D->Front - 1 + D->MaxSize) % D->MaxSize; D->Data[D->Front] = X; return true; } ElementType Pop(Deque D) { if (D->Rear == D->Front) return ERROR; ElementType a = D->Data[D->Front]; D->Front = (D->Front + 1) % D->MaxSize; return a; } bool Inject(ElementType X, Deque D) { if ((D->Rear + 1) % D->MaxSize == D->Front) return false; D->Data[D->Rear] = X; D->Rear = (D->Rear + 1) % D->MaxSize; return true; } ElementType Eject(Deque D) { if (D->Rear == D->Front) return ERROR; D->Rear = (D->Rear - 1 + D->MaxSize) % D->MaxSize; ElementType a = D->Data[D->Rear]; return a; } 下面是题干 #include <stdio.h> #include <stdlib.h> #define ERROR -1 typedef int ElementType; typedef enum { push, pop, inject, eject, end } Operation; typedef enum { false, true } bool; typedef int Position; typedef struct QNode *PtrToQNode; struct QNode { ElementType *Data; /* 存储元素的数组 */ Position Front, Rear; /* 队列的头、尾指针 */ int MaxSize; /* 队列最大容量 */ }; typedef PtrToQNode Deque; Deque CreateDeque( int MaxSize ) { /* 注意:为区分空队列和满队列,需要多开辟一个空间 */ Deque D = (Deque)malloc(sizeof(struct QNode)); MaxSize++; D->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType)); D->Front = D->Rear = 0; D->MaxSize = MaxSize; return D; } bool Push( ElementType X, Deque D ); ElementType Pop( Deque D ); bool Inject( ElementType X, Deque D ); ElementType Eject( Deque D ); Operation GetOp(); /* 裁判实现,细节不表 */ void PrintDeque( Deque D ); /* 裁判实现,细节不表 */ int main() { ElementType X; Deque D; int N, done = 0; scanf("%d", &N); D = CreateDeque(N); while (!done) { switch(GetOp()) { case push: scanf("%d", &X); if (!Push(X, D)) printf("Deque is Full!\n"); break; case pop: X = Pop(D); if ( X==ERROR ) printf("Deque is Empty!\n"); else printf("%d is out\n", X); break; case inject: scanf("%d", &X); if (!Inject(X, D)) printf("Deque is Full!\n"); break; case eject: X = Eject(D); if ( X==ERROR ) printf("Deque is Empty!\n"); else printf("%d is out\n", X); break; case end: PrintDeque(D); done = 1; break; } } return 0; } /* 你的代码将被嵌在这里 */
用c语言建立一个顺序表,并且对表进行操作
写了个小程序,目的要求:用c语言建立一个顺序表,表中元素为学生,每个学生信息包含姓名、学号和成绩三部分,对该表实现:① 输出、② 插入、③ 删除、④ 查找功能,并计算出平均成绩和总成绩 感觉我的代码没什么问题,编译也正常通过,但是每次运行都会出现这样的问题,不知道是什么原因,希望又高手能帮忙解答下,谢了 ![CSDN移动问答][1] #include<stdio.h> #include<string.h> void chu(int a); void zhao(int a); void cha(int a); void shan(int a); void score ( ); struct student { char name[10]; int num; int score; }person[100]; int g=0; int main() { int c,d,e,h,i; char b; printf("学生系统管理菜单\nA.输出\nB.查找\nC.插入\nD.删除\nE.计算成绩\nF.退出\n"); for(i=0;i<=100;i++) { printf("请输入\n"); scanf("%s",b); switch(b) { case 'A': case 'a': printf("输入要输出信息的学生学号:"); scanf("%s",c); chu(c); break; case 'B': case 'b': printf("输入要查找的学生学号:"); scanf("%d",d); zhao(d); break; case 'C': case 'c': printf("请输入要插入的编号:"); scanf("%d",e); printf("\n请输入要插入的学生信息 顺序:name num score"); cha(e);break; case 'D': case 'd': printf("请输入要删除学生学号:"); scanf("%d",h); shan(h);break; case 'E': case 'e': scanf("请输入要计算分数的学生学号:"); printf("学生的总的成绩和平均成绩分别是:"); score();break; default : printf("输入有误,请重新输入要执行的功能\n"); } getchar(); if(b=='F') return 0; } } void chu(int a) { if(g!=0) printf("\n该学生的信息如下:\n姓名:%s 学号:%d 成绩:%d",person[a].name,person[a].num,person[a].score); else printf("\n系统中未存储任何信息"); } void zhao (int a) { int i; for(i=0;i<=100;i++) { if(person[i].num==a) printf("\n该学生的信息如下:\n姓名:%s 学号:%d 成绩:%d",person[i].name,person[i].num,person[i].score); } } void cha (int a) { int i; for(i=1;;i++) { if(person[a].num >0) { printf("该编号已经存在,请重新输入\n"); scanf("%s",a); } break; } printf("请输入名字 编号 成绩(每输入一项之后按回车)\n"); scanf("%s",person[a].name); scanf("%d",person[a].num); scanf("%d",person[a].score); g=g+1; } void shan (int a) { int i; int j; for(i=0;i<100;i++) { if(person[i].num==a) { strcpy(person[i].name,0); person[i].num=0; person[i].score=0; for(j=i;j<100;j++) { strcpy(person[j].name ,person[j+1].name); person[j].score = person[j+1].score; person[j].num = person[j+1].num; } } } g=g-1; } void score () { int i,b=0; float c; for(i=0;i<g;i++) b=b+person[i].score; c=(float)b/g; printf("%d %d",b,c); getchar(); getchar(); } [1]: http://img.blog.csdn.net/20131114100040296?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDg5NzY4Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast
C语言队列的一个问题/
#include "stdafx.h" #include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> #define MAX_SIZE 20 #define ADD_SIZE 2 #define LENGTH 15 #define FALSE -1 #define TRUE 1 typedef char QElemType; typedef int Status; typedef struct QNode { QElemType data[LENGTH]; struct QNode *next; }QNode, *QueuePtr; typedef struct { QueuePtr front; QueuePtr rear; int number; }Message; Status CreatMessageQueue(Message **m) { if (((*m)->front = (QueuePtr)malloc(sizeof(QueuePtr))) == NULL) return FALSE; (*m)->rear = (*m)->front; //开始时为空队列 strcpy((*m)->front->data, "head"); //设立一个头元素 (*m)->front->next = NULL; (*m)->number = 0; //标志设0 return TRUE; } Status EnQueue(Message *m, char a[]) { QueuePtr *p; if ((p = (QueuePtr*)malloc(sizeof(QueuePtr))) == NULL); return FALSE; strcpy((*p)->data, a); (*p)->next = NULL; m->rear->next = (*p); m->rear = (*p); return TRUE; } char* OutMessage(Message *m) { static char a[MAX_SIZE]; QueuePtr *p; if (m->front->next == NULL) return NULL; (*p) = m->front->next; m->front->next = (*p)->next; if ((*p)->next == NULL) m->rear = m->front; strcpy(a, (*p)->data); return a; } void FullDelet(Message *m, char a[]) { if (m->number == 20) { OutMessage(m); m->number--; } EnQueue(m, a); m->number++; } void DeletALL(Message *m) { while (m->front != m->rear) OutMessage(m); m->number = 0; } void DeletONE(Message *m, int n) {//把m指向*m的地址传给P,用P来间接实现删除操作,一一遍历。 Message *p; QueuePtr *s; int i = 1; p = m; while (i<n) { p->front = p->front->next; i++; } *s = p->front->next; p->front->next = p->front->next->next; free(*s); m->number--;//删除后标志减一 } void ShowAllMessage(Message *m) { Message *p; p = m; while (p->front != m->rear) { p->front = p->front->next; printf("%s\n", p->front->data); } printf("\n"); } int main() { Message **m; char a[LENGTH]; CreatMessageQueue(m); for (int i = 0;i < 5;i++) { EnQueue(*m, a); for (int i = 0;i < 10;i++) { scanf("%c", a[i]); } } ShowAllMessage(*m); } 就是这个程序,主程序我写的有错误,希望有人解释一下为什么在主程序进行到 CreatMessageQueue方法时报错,说我m未定义。
通讯录管理系统: 通过电话号码查询通讯录,查不出东西。
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<windows.h> struct stu //第一部分:声明结构体类型struct stu { char name[100];//姓名为字符串型 char cel[50];//手机 char tel[50];//电话 char mail[50];//邮件 char add[100];//地址为字符串型 char post[15];//邮编 char qq[50]; char gend[2]; struct stu *next;//用指针处理链表,next是指针变量,指向结构体变量 }; struct stu *charu(struct stu *head,struct stu *q)//第二部分:插入函数(插入新结点) { struct stu *p; for(p=head; p->next!=NULL; p=p->next); //for(使p也指向head;当p为空文件时 ;p指向下一个结点) p->next=q; q->next=NULL; return head; } void search(struct stu *head) //第三部分:查找结点并输出 { struct stu *p; int a;//要查找的电话 if(head->next==NULL)//头文件为空时打印出的结果为"通讯录为空" printf("**********************************通讯录为空!!!*********************************\n\n\n"); else//头文件不为空时,开始查询学生的信息 { printf("\t输入要查询的电话号码:"); scanf("%d",&a); for(p=head->next; p->next!=NULL; p=p->next) //for(使p也指向head;当p为空文件时 ;p指向下一个结点) { if(p->cel==a) //如果输入的电话号码和某个相同,输出以下的东西。 { printf(" 要查找的学生信息为:\n"); printf(" ★姓名:"); puts(p->name); printf("\t性别:"); puts(p->gend); printf("\t地址:"); puts(p->add); printf("\t邮编:"); puts(p->post); printf("\t手机号"); puts(p->cel); printf("\tQQ:"); puts(p->qq); printf("\t邮箱"); puts(p->mail); printf("\t查找成功!!!"); printf("\n\n\n"); break; } } if(p->cel==a) { printf(" 要查找的学生信息为:\n"); printf(" ★姓名:"); puts(p->name); printf("\t性别:"); puts(p->gend); printf("\t地址:"); puts(p->add); printf("\t邮编:"); puts(p->post); printf("\t手机号"); puts(p->cel); printf("\tQQ:"); puts(p->qq); printf("\t邮箱"); puts(p->mail); printf("\t查找成功!!!"); printf("\n\n\n"); } else printf("no people have found!!!\n");//如果不符合,就输出没有找到 } } struct stu *del(struct stu *head) //第四部分:删除结点 { struct stu *p,*q; int a;//要删除的电话号码 if(head->next==NULL)// 头文件为空时,输出通讯录为空 printf("**********************************通讯录为空!!!*********************************\n\n\n"); else { printf("\t输入要删除电话号码:"); scanf("%d",&a); for(p=head,q=p->next; q->cel!=a&&q->next!=NULL;) { p=p->next; q=p->next; } if(q->cel==a) { p->next=q->next; free(q);//释放q,也就是删除q,在这里就是删除q(学号为a) printf("删除成功!!!\n"); } else printf("no people have found!!!");//如果不符合,就输出没有找到 } return head;//返回头文件 } struct stu *change(struct stu *head) //第五部分:修改结点内容 { int b,a,c; struct stu *p; if(head->next==NULL)// 头文件为空时,输出通讯录为空 printf("**********************************通讯录为空!!!*********************************\n\n\n"); else { printf(" 输入要修改电话号码:"); scanf("%d",&a); for(p=head->next; p!=NULL; p=p->next) { start: printf(" 输入想要修改什么?\n"); printf("\t\t\t 1:修改姓名\n"); printf("\t\t\t 2:性别\n"); printf("\t\t\t 3:地址\n"); printf("\t\t\t 4:邮编\n"); printf("\t\t\t 5:手机号\n"); printf("\t\t\t 6:QQ\n"); printf("\t\t\t 7:邮箱\n"); printf(" 请输入你的选择:"); scanf("%d",&b); switch(b)//先通过学号找到该学生,然后用switch语句选择修改项,再用switch和goto语句实现是否循环 { case 1: printf("\t输入新姓名:"); scanf("%s",p->name); break; case 2: printf("\t输入新的性别:"); scanf("%s",p->gend); break; case 3: printf("\t输入新的地址:"); scanf("%s",p->add); break; case 4: printf("\t输入新的邮编;"); scanf("%s",p->post); break; case 5: printf("\t输入新的手机号:"); scanf("%s",p->cel); break; case 6: printf("\t输入新的QQ:"); scanf("%s",p->qq); break; case 7: printf("\t输入新的邮箱;"); scanf("%s",p->mail); break; default: printf("输入操作错误,请重新输入:"); } printf("修改成功!!!\n"); printf(" 是否要修改其他项? 1:是 2:否\n"); printf(" 请输入你的选择:"); scanf("%d",&c); switch(c) //goto语句实现是否循环 { case 1: goto start; case 2: break; } } } return head; //返回头文件 } void printall(struct stu *head) //第六部分:输出全部通讯录 { struct stu *p=head->next; while(1) { if(p==NULL) { printf("**********************************通讯录为空!!!*********************************\n\n\n"); break; } else if(p->next==NULL) { printf(" ★姓名:"); puts(p->name); printf("\t性别:"); puts(p->gend); printf("\t地址:"); puts(p->add); printf("\t邮编:"); puts(p->post); printf("\t电话:"); puts(p->tel); printf("\tQQ:"); puts(p->qq); printf("\t邮箱:"); puts(p->mail); printf("输出成功!!!\n"); printf("\n\n\n"); break; } else { printf(" ★姓名:"); puts(p->name); printf("\t性别:"); puts(p->gend); printf("\t地址:"); puts(p->add); printf("\t邮编:"); puts(p->post); printf("\t电话:"); puts(p->tel); printf("\tQQ:"); puts(p->qq); printf("\t邮箱:"); puts(p->mail); printf("\n"); p=p->next; continue; } printf("输出成功!!!\n"); } } void sf(struct stu *head) //第八部分:释放结点退出系统 { struct stu *p=head ; printf("释放链表:\n"); while(p!=NULL) { head=head->next; free(p); p=head; } printf("释放链表成功!!!\n"); } int main()// 第九部分:主函数框架 { int cz;//操作符 struct stu *head,*q; head=(struct stu*)malloc(sizeof(struct stu));//动态链表malloc head->next=NULL;//使next指向下一个结点,next结点不放其他结点地址 system("color fc");//修改dos窗口前背景色,用两个十六进制数表示 printf("班级: 姓名: 学号: 设计课题:个人通讯录管理系统\n"); printf("\n********************************C语言课程设计***********************************\n"); printf(" *******************★个人通讯录管理系统★*****************\n\n\n"); printf(" * 1:新建通讯录 *\n"); printf(" * 2:删除通讯录 *\n"); printf(" * 3:修改通讯录 *\n"); printf(" * 4:查询通讯录 *\n"); printf(" * 5:显示全部记录 *\n"); printf(" * 6:释放链表并结束程序 *\n"); printf(" *********************************************************\n"); start : printf("输入操作符1-6:");//"输入操作符1- scanf("%d",&cz); switch(cz)//switch语句 { case 1: q=(struct stu *)malloc(sizeof(struct stu)); printf("\t输入姓名:"); scanf("%s",q->name); printf("\t输入性别:"); scanf("%s",q->gend); printf("\t地址:"); scanf("%s",&q->add); printf("\t输入邮编:"); scanf("%s",&q->post); printf("\t手机号:"); scanf("%s",q->cel); printf("\tQQ号:"); scanf("%s",q->qq); printf("\t输入电子邮件:"); scanf("%s",q->mail); charu(head,q); printf("插入成功!!!\n"); break; case 2://删除 head=del(head); break; case 3: change(head); break;//修改学生信息 case 4: search(head); break;//查找结点head case 5: printall(head); break; //保存文件 case 6: //释放结点退出系统 sf(head); exit (0); default: printf("输入操作错误,重新"); //什么也不符合就"输入操作错误,重新" } goto start;//用goto语句实现循环操作 return 0; }
关于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函数也出现位置冲突报错。。功力不足实在解决不了。。跪求大神解答。。(感觉自己写的东西除了上面两个错误应该还有,但是因为位置冲突问题就只能编译到那个地方无法进行下去。。我肉眼实在找不出来。。
|undefined reference to `init_student_info_list'| 怎么解决?
大一c语言作业出现bug,求解决 ```main #include "student.h" #include <stdlib.h> #include <stdio.h> void menu(); //学生信息链表 student_info* student_list; //用户可以选择1-7可以分别进行学生信息的查看、添加、删除,修改,计算平均成绩,保存,退出系统操作。 int main() { int choice; int num; printf("**************************\n"); printf("欢迎使用学生信息管理系统\n"); printf("**************************\n"); printf("-----------------------------\n"); init_student_info_list(); if(read_file()) printf("从文件中读取学生信息成功.\n"); else printf("从文字中读取学生信息失败.\n"); printf("-----------------------------\n"); menu(); while(1) { printf("请选择操作: "); scanf("%d",&choice); switch(choice) { case 1: if(student_list_empty()) printf("学生信息表为空,请先添加学生信息.\n"); else display_student_info(); break; case 2: if(add_student_info()) printf("添加学生信息成功.\n"); else printf("添加学生信息失败.\n"); break; case 3: if(student_list_empty()) printf("学生信息表为空,请先添加学生信息.\n"); else { printf("请输入要删除学生信息的学号: "); scanf("%d",&num); if(delete_student_info(num)) printf("成功删除该学号对应的学生信息.\n"); else printf("删除失败.\n"); } break; case 4: if(student_list_empty()) printf("学生信息表为空,请先添加学生信息.\n"); else { printf("请输入要修改学生信息的学号: "); scanf("%d",&num); if(modify_student_info(num)) printf("成功修改该学号对应的学生信息.\n"); else printf("修改失败.\n"); } break; case 5: if(student_list_empty()) printf("学生信息表为空,请先添加学生信息.\n"); else display_average(); break; case 6: if(student_list_empty()) printf("学生信息表为空,请先添加学生信息.\n"); else if(save_file()) printf("保存学生信息成功.\n"); else printf("保存学生信息失败.\n"); break; case 0: printf("欢迎下次使用,再见.\n"); system("pause"); exit(0); break; default: printf("输入错误,请重新选择操作.\n"); } } system("pause"); return 0; } void menu() { printf("1.查看学生信息.\n"); printf("2.添加学生信息.\n"); printf("3.删除学生信息.\n"); printf("4.修改学生信息.\n"); printf("5.输出平均成绩.\n"); printf("6.保存学生信息.\n"); printf("0.退出系统操作.\n"); } ``` student。h #ifndef STUDENT_HEAD #define STUDENT_HEAD typedef struct node /*定义结构体*/ { int num; //学号 char name[15];//姓名 char sex[9]; //性别 int age; //年龄 int english; //英语成绩 int math; //数学成绩 int computer;//计算机成绩 int average; //平均成绩 struct node *next; //链表指针域 }student_info; //学生信息链表 extern student_info* student_list; //全局变量声明 //初始化函数声明 //初始化学生信息链表 void init_student_info_list(); //判断学生信息链表是否为空 int student_list_empty(); //操作函数声明 //向学校信息表中添加学生信息记录 int add_student_info(); //根据学号删除学生信息 int delete_student_info(int num); //根据学号修改学生信息 int modify_student_info(int num); //根据学号查找学生信息 student_info* search_student_info(int num); //输出每个学生的平均成绩 void display_average(); //显示所有学生信息 void display_student_info(); //将学生信息保存到文件 int save_file(); //从文件中读取学生信息 int read_file(); #endif ``` student。cpp #include "student.h" #include <stdio.h> #include <string.h> #include <malloc.h> //初始化学生信息链表 void init_student_info_list() { //学生信息链表头结点 student_list = (student_info*)malloc(sizeof(student_info)); student_list->next = NULL; } //判断学生信息链表是否为空 int student_list_empty() { return student_list->next == NULL; } //操作函数实现 //向学校信息表中添加学生信息记录 int add_student_info() { student_info *pstu = (student_info*)malloc(sizeof(student_info)); if(pstu == NULL) { printf("内存分配失败.\n"); return 0; } printf("请按要求一次输入学生的信息.\n"); printf("请输入学号: "); scanf("%d",&pstu->num); //判断该学号是否已经存在 if(search_student_info(pstu->num) != NULL) { printf("该学号已经存在学生信息表中.\n"); return 0; } printf("请输入姓名: "); getchar(); gets(pstu->name); printf("请输入性别: "); scanf("%s",pstu->sex); printf("请输入年龄: "); scanf("%d",&pstu->age); printf("请输入英语成绩: "); scanf("%d",&pstu->english); printf("请输入数学成绩: "); scanf("%d",&pstu->math); printf("请输入计算机成绩: "); scanf("%d",&pstu->computer); pstu->average = (pstu->english + pstu->math + pstu->computer)/3; //每次从学生信息链表的头部插入; pstu->next = student_list->next; student_list->next = pstu; return 1; } //根据学号删除学生信息 int delete_student_info(int num) { student_info *pstu; student_info *qstu; if(search_student_info(num) == NULL) { printf("不存在该学好为%d的学生信息.\n",num); return 0; } pstu = student_list->next; qstu = student_list; while(pstu->num != num) { qstu = pstu; pstu = pstu->next; } qstu->next = pstu->next; free(pstu); return 1; } //根据学号修改学生信息 int modify_student_info(int num) { int choice; student_info *pstu = search_student_info(num); if(pstu == NULL) { printf("不存在该学好为%d的学生信息.\n",num); return 0; } printf("1.姓名 2.性别 3.年龄 4.英语成绩 5.数学成绩 6.计算机成绩.\n"); printf("请选择修改的信息: "); scanf("%d",&choice); switch(choice) { case 1: printf("请输入新的姓名: "); getchar(); gets(pstu->name); break; case 2: printf("请输入新的性别: "); scanf("%s",pstu->sex); break; case 3: printf("请输入新的年龄: "); scanf("%d",&pstu->age); break; case 4: printf("请输入新的英语成绩: "); scanf("%d",&pstu->english); break; case 5: printf("请输入新的数学成绩: "); scanf("%d",&pstu->math); break; case 6: printf("请输入新的计算机成绩: "); scanf("%d",&pstu->computer); break; default: printf("请按提示要求操作.\n"); } return 1; } //根据学号查找学生信息 student_info* search_student_info(int num) { student_info *pstu; pstu = student_list->next; while(pstu && pstu->num != num) { pstu = pstu->next; } return pstu; } //输出每个学生的平均成绩 void display_average() { student_info *pstu; pstu = student_list->next; while(pstu) { printf("学号为%d,姓名为%s的学生平均成绩为: %d\n",pstu->num,pstu->name,pstu->average); pstu = pstu->next; } } //显示所有学生信息 void display_student_info() { student_info *pstu; pstu = student_list->next; printf("所有学生信息如下所示.\n"); printf("学号\t姓名\t性别\t年龄\t英语\t数学\t计算机\t平均成绩.\n"); while(pstu) { printf("%d\t",pstu->num); printf("%s\t",pstu->name); printf("%s\t",pstu->sex); printf("%d \t",pstu->age); printf("%d \t",pstu->english); printf("%d \t",pstu->math); printf("%d \t",pstu->computer); printf("%d\n",pstu->average); pstu = pstu->next; } } //将学生信息保存到文件 int save_file() { FILE *pfile; student_info *pstu; pfile = fopen("student.txt","w"); if(pfile == NULL) { printf("打开文件失败.\n"); return 0; } pstu = student_list->next; while(pstu) { fprintf(pfile,"%5d%15s%9s%3d%4d%4d%4d%4d",pstu->num,pstu->name,pstu->sex,pstu->age, pstu->english,pstu->math,pstu->computer,pstu->average); pstu = pstu->next; } fclose(pfile); return 1; } //从文件中读取学生信息 int read_file() { FILE *pfile; student_info *pstu; pfile = fopen("student.txt","r"); if(pfile == NULL) { printf("打开文件失败.\n"); return 0; } while(!feof(pfile)) { pstu = (student_info*)malloc(sizeof(student_info)); fscanf(pfile,"%5d%15s%9s%4d%4d%4d%4d%4d",&pstu->num,pstu->name,pstu->sex,&pstu->age, &pstu->english,&pstu->math,&pstu->computer,&pstu->average); pstu->average = (pstu->english + pstu->math + pstu->computer)/3; //每次从学生信息链表的头部插入; pstu->next = student_list->next; student_list->next = pstu; } fclose(pfile); return 1; } ``` 用code blokes运行 出现 D:\Projects\C\3\main.c|19|undefined reference to `init_student_info_list'| D:\Projects\C\3\main.c|20|undefined reference to `read_file'| D:\Projects\C\3\main.c|33|undefined reference to `student_list_empty'| 怎么解决啊?
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
python自动下载图片
近日闲来无事,总有一种无形的力量萦绕在朕身边,让朕精神涣散,昏昏欲睡。 可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢,我不禁陷入了沉思。。。。 突然旁边的IOS同事问:‘嘿,兄弟,我发现一个网站的图片很有意思啊,能不能帮我保存下来提升我的开发灵感?’ 作为一个坚强的社畜怎么能说自己不行呢,当时朕就不假思索的答应:‘oh, It’s simple. Wait for me for a ...
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
C++(数据结构与算法):62---搜索树(二叉搜索树、索引二叉搜索树)
一、搜索树的复杂度分析 本文考察二叉搜索树和索引二叉搜索树 二叉搜索树的渐进性能可以和跳表媲美: 查找、插入、删除操作所需的平均时间为Θ(logn) 查找、插入、删除操作的最坏情况的时间为Θ(n) 元素按升序输出时所需时间为Θ(n) 虽然在最坏情况下的查找、插入、删除操作,散列表和二叉搜索树的时间性能相同,但是散列表在最好的情况下具有超级性能Θ(1) 不过,对于一个指定的关键...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
最全最强!世界大学计算机专业排名总结!
我正在参与CSDN200进20,希望得到您的支持,扫码续投票5次。感谢您! (为表示感谢,您投票后私信我,我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名 中国共...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
立即提问