一、 创建一个字符单链表,实现对字符的插入、删除、查找、元素个数的统计等基本操作,要求为用户提供选择式菜单?

C语言 数据结构

一、 创建一个字符单链表,实现对字符的插入、删除、查找、元素个数的统计等基本操作,要求为用户提供选择式菜单。

2个回答

#include
typedef int ElemType;
typedef struct lnode
{
ElemType data;
struct lnode *next;
}Lnode,*Linklist;

void CreateList(Linklist &L,int n)
{

L=new Lnode;
L->data=NULL;
L->next=NULL;
Linklist rear=L;//定义指向Lnode结构体指针rear,并指向L
cout<<"请输入"< for (int i=0; i {
Linklist s=new Lnode;
cin>>s->data;
rear->next=s;
rear=s;

}
rear->next=NULL;

}

void Insert(Linklist &L,int i, ElemType x)
{

Linklist p=L;
int j=0;

while (j {
p=p->next;
j++;
}
if (!p) cout<<"位置不合理";//如果i-1已经超出链表的范围
else
{ Linklist s=new Lnode;

s->data=x;

s->next=p->next;

p->next=s;
}
}

void Delete(Linklist &L,int i)
{ Linklist p=L;
int j=0;

while (j {
p=p->next;
j++;
}
if (p||p->next!=NULL) //因为删除的是后面的元素,所以首先判断p不为空及不指向最后一个元素
{ Linklist q=new Lnode;
q=p->next->next;
p->next=q; //直接连上第i+1元素就ok
}
else cout<<"位置不合理";
}

int Find(Linklist &L,int i)
{
Linklist p=L;
int j=0;

while (p&&j {
p=p->next;
j++;
}
if (!p) cout<<"Error";
else cout<<"存在你要找的值为"< return p->data;

}

void Putout(Linklist &L)
{
Linklist p=L->next;
if(!p) cout<<"没有数据存入";
while(p!=NULL)
{
cout<data<<" ";
p=p->next;
}
cout<<'\n';
}

void main()
{
Linklist K;
int i,x,y;
cout<<"请输入您要存储的元素个数:"<<'\n';
cin>>i;
CreateList(K,i);
Putout(K);
while(1)
{ cout<<"请输入您要进行的操作1插入2删除3查找4退出"<<'\n';
cin>>i;

if(i==1) 

{
cout<<"请输入你要插入的位置x和要插入的元素y:"<<'\n';
cin>>x>>y;
Insert(K,x,y);
Putout(K);
continue;
}

if(i==2)
{
cout<<"请输入你要删除的元素位置x:"<<'\n';
cin>>x;
Delete(K,x);
Putout(K); 
continue;
}


if(i==3)
{cout<<"请输入你要查找的元素:"<<'\n';
 cin>>x; 
 Find(K,x); 
 Putout(K); 
 continue;}

if(i==4) break;

else 
{cout<<"你的输入有误"<<'\n';
continue;}

}
}

weixin_43918937
梦魂断江南 错误了 第一行就?
8 个月之前 回复

可以参考下这个博客,再修改写内容就可以
https://blog.csdn.net/lixiaogang_theanswer/article/details/71566985

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

这是一段代码,但是自己不会运行(搞不清输入顺序,希望大神给个代码运行截图,最好解释一下,谢谢了) #include <iostream> #include<iomanip> using namespace std; struct student//定义结构体变量; { long int num; double score; student *next; }; student *creatlink()//创建链表节点 { student *p1,*p2,*p3,*head=NULL;//初始化头指针; p1=new student;//动态申请内存, cin>>p1->num>>p1->score;//输入结构体中的内容(为了好以0 0结束创建节点) if(p1->num!=0&&p1->score!=0) { head=p1; while(p1->num!=0&&p1->score!=0)//判断是不是0 0; { p2=new student;//再次申请内存。 p1->next=p2; p3=p1; cin>>p2->num>>p2->score;//输入数据 p1=p2; } p3->next=NULL;//尾指针置空。 } else head=NULL; return head; } student *dellink(student *head,long m) { student *p=head,*p1; while(p!=NULL) { if((p->num==m)&&(p==head))//如果要删除的节点在头上。 { head=p->next; break; } else if((p->num==m)&&(p->next==NULL))//删除的节点在结尾 { p=NULL; } else { if(p->num!=m)//要删的节点在中间时判断是否是要删的节点 { p1=p; p=p->next; } else { p1->next=p->next; break; } } } return head; } student *insertlink(student *head,student *stu) { student *p,*p1,*p3,*p2; p=head; p2=new student;//申请动态内存,为了将新的节点地址变化(如果不变第二次插入式会出错) //cout<<p2<<endl; p2->num=stu->num;//赋值,(也可以用结构体直接赋值) p2->score=stu->score; p2->next=stu->next; p1=p2; if(head==NULL)//判断链表是否为空 { head=p1; p1->next=NULL; } else { while(p->next->next!=NULL) { if((p->num<=p1->num)&&(p->next->num>=p1->num))//判断是否是要插入的位置(此处要求输入是按升序输入的,插入时按升序插入) { p3=p->next; p->next=p1; p1->next=p3; break; } p=p->next; } //cout<<p->next->next<<endl; if((p->num<=p1->num)&&(p->next->num>=p1->num))//由于判断结束的标志是p->next->next,所以还有两组数据还没比较。 { p3=p->next; p->next=p1; p1->next=p3; } else if(p->next->num<=p1->num) { p->next->next=p1; p1->next=NULL; } } return head; } void printlink(student *head) { student *p=head; while(p->next!=NULL) { cout<<p->num<<" "<<p->score<<endl; p=p->next; } cout<<p->num<<" "<<p->score<<endl; } void freelink(student *head) { student *p=head,*p1; while(p!=NULL) { p1=p->next;//存储下一个指针的内容 delete(p);//释放p的内存 p=p1; } delete(p); } int main() { student *creatlink(void); student *dellink(student *,long); student *insertlink(student *,student *); void printlink(student *); void freelink(student *); student *head,stu; long del_num; head=creatlink(); cin>>del_num; head=dellink(head,del_num); cin>>stu.num>>stu.score; head=insertlink(head,&stu); cin>>stu.num>>stu.score; head=insertlink(head,&stu); cout<<setiosflags(ios::fixed); cout<<setprecision(2); printlink(head); freelink(head); return 0; }

单链表具体实现实现reverse

用c++语言写,需要完整的程序,能运行的 将链表的顺序颠倒过来,最好写清楚指针的具体实现的过程 谢谢谢谢

单链表的创建与插入.删除

typedef struct node { int data; struct node *next; }NODE; typedef NODE Head; typedef NODE *Pointer; void CreateList(Head *head,int n){ Pointer q; int i; head->data=0; head->next=NULL; head=(Pointer)malloc(sizeof(NODE)); q=head; printf("输入%d个元素:\n",n); for(i=n;i>0;n--){ q=(Pointer)malloc(sizeof(NODE)); scanf("%d",&q->data); q->next=head->next; head->next=q; } } int InsertList(NODE*head,int idx,int e) { Pointer s,p; int j=0; p=head; while(p&&j<idx-1) p=p->next;j++; if(!p||j>idx-1) return 0; s=(Pointer)malloc(sizeof(NODE)); s->data=e;s->next=p->next; p->next=s; return 1; } int DeleteList(NODE *head,int idx,int *e){ NODE *p,*q;int j=0;q=head; while(p->next&&j<idx-1){ p=p->next;j++; } if(!(p->next)||j>idx-1) return 0; q=p->next;p->next=q->next; e=q->data;free(q); return 1; } void DispList(Head*head){ Pointer p; p=head->next; while(p!=NULL){ printf("%d",p->data); p=p->data; } printf("\n"); } int main() { Head L,La; int n,e,a,b; printf("输入元素个数:\n"); scanf("%d",&n); CreateList(&L,n); printf("输入要插入的元素及位置:\n"); scanf("%d%d",&a,&b); InsertList(&L,a,b); DispList(&La) printf("输入要删除的元素及位置:\n"); DeleteList(&L,1,&e); return 0; }

C语言求助:输入一个字符串,将其中的字母字符输入一个链表,将其中的数字字符输入另一个链表。

输入一个字符串,将其中的字母字符输入一个链表,将其中的数字字符输入另一个链表,要求程序能够按读入时相反顺序输出两个字符串。 知道用伪代码怎么实现,但是无法编出可以运行的代码,求大佬帮助。

VS2019运行单链表的插入和删除操作时引发异常?

代码运行时具体异常如下: ![图片说明](https://img-ask.csdn.net/upload/202005/19/1589850127_110144.png)![图片说明](https://img-ask.csdn.net/upload/202005/19/1589850178_771306.png)!![图片说明](https://img-ask.csdn.net/upload/202005/19/1589850290_893366.png)![图片说明](https://img-ask.csdn.net/upload/202005/19/1589850300_200185.png) 具体代码如下 ``` /*======开发环境:Windows10,Visual Studio Community 2019 版本:16.5.4===========*/ /*=================头文件=====================*/ #include <stdio.h> #include <string.h> #include <malloc.h> #include <stdlib.h> typedef struct node //定义结点 { char data[10]; //结点的数据域为字符串 struct node* next; //结点的指针域 }ListNode; typedef ListNode* LinkList; //自定义LinkList单链表类型 /*=====================函数声明=========================*/ LinkList CreatListR1(); //用头插入法建立带头结点的函数 ListNode* LocateNode(LinkList head, char* key); //函数,按值查找结点 void insertlist(LinkList head, int i, char key); //函数,插入结点 void deletelist(LinkList head, char* key); //函数,删除指定值的结点 void printlist(LinkList head); //函数,打印链表中的所有值 void deleteall(LinkList head); //函数,删除整个链表 /*====================主函数=======================*/ int main() { char* ch; char num[4]; char b[8]; ch = &b[0]; int i; LinkList head; head = CreatListR1(); //用头插入法建立单链表,返回头指针 printlist(head); printf("输入y或n选择是否插入结点。\n"); scanf("%s", num); if (strcmp(num, "y") == 0 || strcmp(num, "Y") == 0) { printf("请输入要插入的字符串:"); scanf("%s", ch); printf("\n请输入要插入的位置:"); scanf("%d", &i); insertlist(head, i, ch); printlist(head); } printf("输入y或n选择是否删除结点。\n"); scanf("%s", num); if (strcmp(num, "y") == 0 || strcmp(num, "Y") == 0) { printf("请输入要删除的字符串:"); scanf("%s", ch); deletelist(head, ch); printlist(head); } deleteall(head); system("pause"); } /*============用头插入法建立带头结点的函数==============*/ /*@param void*/ /*@return 返回头指针*/ /*@note 让用户自己输入字符串,创建单链表*/ LinkList CreatListR1(void) { char* ch; char a[8]; ch = &a[0]; LinkList head = (LinkList)malloc(sizeof(ListNode)); //创建头结点 ListNode* s, * r, * pp; r = head; r->next = NULL; //初始为空链表 printf("输入“#”代表输入结束。\n"); printf("请输入不重复的字符串:\n"); scanf("%s", ch); while (strcmp(ch, "#") != 0) { pp = LocateNode(head, ch); //查找是否输入的字符串已经存在 if (pp == NULL) { s = (ListNode*)malloc(sizeof(ListNode)); //创建新的结点 strcpy(s->data, ch); s->next = r->next; r->next = s; //将新结点插入表中 } else { printf("输入了重复的字符串。\n"); } printf("输入“#”代表输入结束。\n"); printf("请输入不重复的字符串:\n"); scanf("%s", ch); } return head; //返回头指针 } /*============按值查找结点,找到则返回结点位置,否则返回NULL==================*/ /*@param LinkList head:要查找的单链表的头指针*/ /*@param char* key:要查找的字符串*/ /*@return 若未查找到,返回NULL,如果查找到,返回字符串的结点位置*/ /*@note 按值查找结点*/ ListNode* LocateNode(LinkList head, char* key) { ListNode* p = head->next; //开始结点比较 while (p && (p->data != key)) //直到p=NULL或者p->data==key为止 p = p->next; //扫描下一个结点 return p; //若p=NULL则查找失败,返回NULL,否则p指向查找的字符串的结点位置 } /*=================向指定结点插入指定值===================*/ /*@param LinkList head:要插入指定值的单链表的头指针*/ /*@param int i:要插入字符串的位置*/ /*@param char* key:要删除的字符串*/ /*@return void*/ /*@note 在指定位置插入指定字符串*/ void insertlist(LinkList head, int i, char* key) { ListNode* p, * t, * pp; int j; p = head; j = 0; pp = LocateNode(head, key); //查找是否输入的字符串已存在 if (pp == NULL) { while (p != NULL && j < i - 1) //寻找第i-1个结点 { p = p->next; j++; } if (j != i - 1) { printf("错误的插入位置。\n"); return; } t = (ListNode*)malloc(sizeof(ListNode)); strcpy(t->data, key); //将字符串s赋值给数据域 t->next = p->next; p->next = t; } else printf("输入的字符串已存在。\n"); } /*===================删除指定值的结点=======================*/ /*@param LinkList head:要删除指定值的单链表的头指针*/ /*@param char* key:要删除的字符串*/ /*@return void*/ /*@note 删除指定字符串的结点*/ void deletelist(LinkList head, char* key) { ListNode* p, * r, * q = head; p = LocateNode(head, key); //按照key值查找结点 if (p = NULL) //若没有找到key值,退出 { printf("输入的字符串不存在。\n"); exit(0); } while (q->next != p) //p为要删除的结点,q为p的前结点 q = q->next; r = q->next; q->next = r->next; //将r的指针域赋值给q的指针域 free(r); //释放结点 } /*==============打印单链表=============*/ /*@param LinkList head:要打印的单链表的头指针*/ /*@return void*/ /*@note 打印单链表*/ void printlist(LinkList head) { ListNode* p = head->next; //从开始结点打印 while (p) { printf("%s, ", p->data); p = p->next; } printf("\n"); } /*==================删除整个单链表,释放空间=================*/ /*@param LinkList head:要删除的单链表的头指针*/ /*@return void*/ /*@note 删除整个单链表*/ void deleteall(LinkList head) { ListNode* p = head, * r; while (p->next) { r = p->next; free(p); p = r; } free(p); } ```

实现一个简单的链表,有以下要求。

1. 请用户输入任意字符串, 以换行分隔. 2. 输入Q或q再按回车则停止输入阶段, 开始输出. 3. 将刚才输入的字符串按照顺序依次打印出来. 4. 要求: 每行字符串用一个链表节点来存储, 用队列来存储所有节点, 输入字符串时执行入队操作, 打印字符串时执行出队操作

编程题 ⑴ 创建一个链表,每个链表结点包括2个成员?

66. 编程题 ⑴ 创建一个链表,每个链表结点包括2个成员:1个整数和1个next指针,要求每个节点的整数成员从键盘输入整数值,当输入0表示数据输入结束; ⑵ 输出链表中每个结点的数据成员的值。 要求使用typedef机制给结点的结构体类型起一个简短的类型名字,并使用这个短类型名来定义变量。 请认真测试程序的正确性。将源代码以文本方式提交,不要直接提交文件。

数组指定位置插入和删除

当前编程题:中山外包-实验6-数组程序设计 2. 已知一初始化的数组a[11]={1,2,3,4,5,6,7,8,9,0}。1)输入x1和n1,将数x1插入在数组的n1(下标)处,原数组从该处之后的元素顺序后移,如果插入的位置不合法,则插在数组的最后一个元素之后;2)执行完上述操作之后,输入n2,将数组下标为n2处的元素删除,该处之后的元素顺序前移,如果删除的位置不合法,则删除数组的第一个元素(下标为0) 输入:两行 第一行,2个数,分别代表x1和n1 第二行,一个数,表示n2 输出:三行,每个数占5列 第一行,10个数,表示原数组元素 第二行,11个数,表示进行插入操作之后的数组 第三行,10个数,代表进行插入之后,又进行了删除操作之后的数组

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个位置 就是头结点那个位置 插入完了以后遍历只能显示出第一个节点 这是怎么回事啊请教各位!!

单链表的头插法和尾插法,用同一个方法求长度。。。。

``` #include <stdio.h> #include <stdlib.h> #include <malloc.h> //单链表结构 typedef int datatype; typedef struct node { datatype data; struct node *next; }linklist; linklist *head,*p;//指针类型说明 /*头插法建表 用头插法建成的链表中结点的次序和输入的顺序是相反的。 */ linklist *CREATLISTF(){ char ch;//逐个输入字符,以'#'为结束符,返回单链表头指针 linklist * head,*s; head=NULL;//链表开始为空 ch=getchar();//读入第一个结点的值 while(ch!='#') { s=malloc(sizeof(linklist));//生成新的结点 s->data=ch; s->next=head; head=s;//将新结点插入到表头上 ch=getchar();//读入下一个结点的值 } return head;//返回表头指针 } //计算不带头结点的单链表的长度,然后输出单链表 void Print(linklist *L) { int num=0; linklist *p; p=L; while(p) { printf("%c ",p->data); p=p->next; num++; } printf("\nthe length is :%d\n",num); } //尾插法——返回表的头指针 linklist *CREATLISTR(){ char ch; linklist * head,*s,*r; head=NULL;//置空链表 r=NULL;//尾指针初值为空。 ch=getchar(); while(ch!='#'){ s=malloc(sizeof(linklist));//生成新的结点 s->data=ch; if (head==NULL) head=s; else r->next=s; r=s; ch=getchar(); } if(r!=NULL) r->next=NULL; return head; } //查找——按照序号查找 //主函数 int main(){ linklist *f,*r ; //printf("head insert:\n"); //f=CREATLISTF();//头插法建立单链表 //Print(f);//打印链表和链表的长度 printf("tail insert:\n"); r=CREATLISTR();//尾插法 Print(r); } ``` ===================== =============调用头插法和尾插法,右边是输出结果============================ ![调用头插法和尾插法](https://img-ask.csdn.net/upload/201604/07/1460024767_275493.png) ==============只是调用尾插法,右边是输出结果============================== ![只是调用尾插法](https://img-ask.csdn.net/upload/201604/07/1460024804_430635.png) ============================================= 在主函数中先是调用头插法再调用尾插法。但是尾插法输出的长度多了一个。如果只是在调用尾插法,长度就正常输出了。这到底是什么原因??

已知单链表L中的结点是按值非递减有序排列的试编写一算法将链表L中值为X的结点删除,使得L仍然有序。

单链表L中的结点是按值非递减有序排列的,这句话是什么意思?结点应该是有序的,但是按值非递减是什么意思?

用java如何创建一个链表

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

单链表实现的多项式加减法计算,输入的负号变成了正号,并且幂为负时显示错误,这个程序应该怎么改?

``` //vc6.0实现的C++版![图片说明](https://img-ask.csdn.net/upload/201907/23/1563861033_43306.png)![图片说明](https://img-ask.csdn.net/upload/201907/23/1563861045_50819.png) //功能:多项式的加减法操作 #include <iostream.h>//读入必须包含的头文件 #include <windows.h>//清屏和颜色设置需要 #include <string.h> #include <fstream.h> #include <iomanip.h> #include <math.h>//处理方幂运算 enum returninfo{success,wrong,fail,overflow,underflow,empty_error};//定义返回信息清单 const int Maxsize=26;//系统允许多项式的最大值 const int Number=40;//设置输入多项式时字符串长度最大限,也可以根据需求任意设置 int order;//设置多项式显示方式0代表降幂显示,1代表升幂显示 class node//定义一个node类,处理多项式中的<项>:如3x^(-2)、4x^3、6x或者常数5等等 { public: node(int initcoeff,int initindex,node *initnext=NULL);//系数、指数、后继结点 node(node *initnext=NULL);//后继结点函数重载:用于头结点 ~node(); int coeff;//系数 int index;//指数 node *next; }; node::node(int initcoeff,int initindex,node *initnext) { coeff=initcoeff; index=initindex; next=initnext; } node::node(node *initnext) { next=initnext; } node::~node() { } /* 定义一个线性表类linklist */ class linklist { public: linklist();//构造函数 ~linklist();//析构函数 void clearlist(void);//清除多项式 bool empty(void) const;//判断是否空链 node *headp;//多项式头结点 }; linklist::linklist()//构造函数 { headp = new node;//申请新结点,作为头结点 headp->next=NULL;//头结点的地址域预设为空地址 } linklist::~linklist()//析构函数 { clearlist();//删除所有数据,释放所有结点 delete headp;//把头结点也释放掉 } void linklist::clearlist(void)//清除多项式 { node *searchp=headp->next,*followp=headp;//初始化两个指针 while(searchp!=NULL) { followp=searchp; searchp=searchp->next; delete followp; } headp->next=NULL;//保留了最后一个结点,就是头结点,并且链域置为空 } bool linklist::empty(void) const//判断是否空链 { if(headp->next==NULL) return true; else return false; } /* 实现多项式加减法的类sequelist */ class sequelist//管理多项式 { public: sequelist(); ~sequelist(); returninfo inputdata(void);//从键盘输入多项式 returninfo deletdata(void);//清空多项式信息 returninfo calculate(void);//赋值计算 void addnode(int site,int icoeff,int iindex);//增加项 void display(char name);//显示某个多项式 void displayname(void);//显示系统中现存多项式的名称 void traveral(void);//遍历所有多项式 void deletepart(char idata);//清除单个多项式信息 void deletcomp(void);//清除全部多项式信息 bool findlist(char idata);//查找多项式(提供多项式名称) bool scanname(char idata);//判断多项式的名称是否合法 bool read();//读文件操作 bool write();//写文件操作 protected: linklist list[Maxsize]; }; sequelist::sequelist() { } sequelist::~sequelist() { } returninfo sequelist::deletdata(void)//清空多项式信息 { int choice,site; char ch,name; cout<<"1.清空系统全部多项式信息"<<endl; cout<<"2.清除某个指定多项式信息"<<endl; cout<<"3.退出清除信息"<<endl; cout<<"请选择:"; cin>>choice; if(choice==1||choice==2) { if(choice==1) { traveral(); cout<<endl<<"请问:您确定要清空全部多项式信息吗?(Y/y):"; cin>>ch; if(ch=='Y'||ch=='y') deletcomp(); else return fail; } else { cout<<"请输入你要清空的多项式的名称(提示:一个大写字母):"; cin>>name; site=int(name-'A'); if(list[site].empty()) return wrong; display(name); cout<<endl<<"请问:您确定要清除该多项式信息吗?(Y/y):"; cin>>ch; if(ch=='Y'||ch=='y') deletepart(name); else return fail; } return success; } else return fail; } returninfo sequelist::calculate(void)//赋值计算 { int site,x,flag=0; double result=0,value; char name,ch; node *searchp; cout<<"请输入需要赋值计算的多项式名称(提示:一个大写字母):"; cin>>name; site=int(name-'A'); if(list[site].empty()) return wrong; display(name); cout<<endl<<"请问:您确认要进行赋值计算吗?(Y/y):"; cin>>ch; if(ch=='Y'||ch=='y') { cout<<"请给出变量x的值(如果方幂过大x不宜取大值):x="; cin>>x; cout<<endl<<name<<"("<<x<<")="; searchp=list[site].headp->next; while(searchp!=NULL) { value=searchp->coeff*pow(x,searchp->index); result+=value; cout<<" "; if(value>=0) { if(flag!=0) cout<<"+"; } cout<<value; flag++; searchp=searchp->next; } cout<<endl<<" ="<<result<<endl<<endl; } else return fail; return success; } void sequelist::display(char name)//显示某个多项式 { cout<<name<<"(x)="; int site; site=int(name-'A'); node *searchp=list[site].headp->next; if(searchp->coeff==0) cout<<"0"; else if(searchp->coeff!=1&&searchp->coeff!=-1) { if(searchp->index==0) cout<<searchp->coeff; else if(searchp->index==1) cout<<searchp->coeff<<"x"; else if(searchp->index<0) cout<<searchp->coeff<<"x^("<<searchp->index<<")"; else cout<<searchp->coeff<<"x^"<<searchp->index; } else { if(searchp->index==0) cout<<searchp->coeff; else if(searchp->index==1) cout<<searchp->coeff<<"x"; else if(searchp->index<0) cout<<searchp->coeff<<"x^("<<searchp->index<<")"; else cout<<searchp->coeff<<"x^"<<searchp->index; } searchp=searchp->next; while(searchp!=NULL) { cout<<" "; if(searchp->coeff!=1&&searchp->coeff!=-1) { if(searchp->index==0) { if(searchp->coeff>0) cout<<"+"; cout<<searchp->coeff; } else if(searchp->index==1) { if(searchp->coeff>0) cout<<"+"; cout<<searchp->coeff<<"x"; } else if(searchp->index<0) { if(searchp->coeff>0) cout<<"+"; cout<<searchp->coeff<<"x^("<<searchp->index<<")"; } else { if(searchp->coeff>0) cout<<"+"; cout<<searchp->coeff<<"x^"<<searchp->index; } } else if(searchp->coeff==1) { if(searchp->index==0) cout<<"+1"; else if(searchp->index==1) cout<<"+x"; else if(searchp->index<0) cout<<"+x^("<<searchp->index<<")"; else cout<<"+x^"<<searchp->index; } else { if(searchp->index==0) cout<<"-1"; else if(searchp->index==1) cout<<"-x"; else if(searchp->index<0) cout<<"-x^("<<searchp->index<<")"; else cout<<"-x^"<<searchp->index; } searchp=searchp->next; } cout<<endl; } void sequelist::deletcomp(void)//清除全部多项式信息 { int i; char name; for(i=0;i<Maxsize;i++) { name=char(i+'A'); deletepart(name); } } void sequelist::deletepart(char idata)//清除单个多项式信息 { int site; site=int(idata-'A'); node *searchp=list[site].headp->next,*followp; while(searchp!=NULL) { followp=searchp; searchp=searchp->next; delete followp; } list[site].headp->next=NULL; } returninfo sequelist::inputdata(void)//从键盘输入多项式(重点,难点,关键) { char iname,idata[Number]; node *searchp,*followp; int flag=0;//标志项系数正负(flag==1表示负,flag==0表示正)A=3x^(-2)+4x^3-6x^(-3)+5 cout<<"请输入你要新建多项式的名称(提示:一个大写字母):"; cin>>iname; if(scanname(iname))//名称通过检验 { int site,icoeff=0,iindex=0,i=0,j=0,k=0; char data[20][20];//将输入的数据分项处理分成20块长度为20的项 site=int(iname-'A'); cout<<"请连续输入多项式不要有空格:"<<endl<<iname<<"(x)="; cin>>idata; //首先将第一项分开来处理 data[k][i]=idata[i]; while(idata[++i]!='+'&&idata[i]!='-'&&idata[i]!='\0') data[k][++j]=idata[i]; data[k][++j]='\n';//项的最后一位以'\n'结束 k++;//将项数加1, //从第二项开始往后的各项处理 for(;idata[i]!='\0';) { j=0;//j还原为0 data[k][0]=idata[i];//记录每一项的符号位 while(idata[++i]!='+'&&idata[i]!='-'&&idata[i]!='\0') { data[k][++j]=idata[i]; if(idata[++i]=='(')//指数为负的处理 { data[k][++j]=idata[i]; data[k][++j]=idata[++i];//将负号写入 i++; } i--; } data[k][++j]='\n';//项的最后一位以'\n'结束 k++;//继续写下一项 }//注意:此时的k后面会有用!!! //得到的data[20][20]为多项式的20个项 for(i=0;i<k;)//将每一项分为node格式,并将其挂链对应的多项式上面 { icoeff=0; iindex=0; j=0; if(data[i][0]=='-')//如果为负 { flag=1; j++; } else if(data[i][0]=='+')//如果为正 { flag=0; j++; } else flag=0;//这个是针对多项式的第一项为正的情况考虑的 //项系数的确定 while(data[i][j]>='0'&&data[i][j]<='9') { icoeff=icoeff*10+int(data[i][j]-'0'); j++; } if(icoeff==0) icoeff=1; if(icoeff==1) icoeff=0-icoeff;//如果系数为负,则加上负号 switch(data[i][j])//将data[i][j]分路: { case 'x'://此项为含x的项 if(data[i][++j]=='\n')//指数为1的情况 iindex=1; else { if(data[i][j]=='^')//后面紧接着是指数的情况(正和负) { if(data[i][++j]=='(')//指数为负的情况 { j++;//跳过负号 while(data[i][++j]>='0'&&data[i][j]<='9') iindex=iindex*10+int(data[i][j]-'0'); iindex=0-iindex; } else//指数为正的情况 { j--; while(data[i][++j]>='0'&&data[i][j]<='9') iindex=iindex*10+int(data[i][j]-'0'); } } else { deletepart(iname);//清空现场再返回错误信息 return wrong; } } //将项插入多项式中 addnode(site,icoeff,iindex); break; case '\n'://此项为常数项 iindex=0; addnode(site,icoeff,iindex); break; default://此项涉及到前面的多项式,如4A,5B,A*B等等 int site1,site2; site1=int(data[i][j]-'A'); if(site==site1||list[site1].empty())//如果为空 { deletepart(iname);//清空现场再返回错误信息 return wrong; } node *searchp1=list[site1].headp->next; if(data[i][++j]=='\n')//如4A,5B { while(searchp1!=NULL) { addnode(site,(searchp1->coeff)*icoeff,searchp1->index); searchp1=searchp1->next; } } else if(data[i][j]=='*')//如3A*B等等 { site2=int(data[i][++j]-'A'); if(site==site2||data[i][++j]!='\n') { deletepart(iname);//清空现场再返回错误信息 return wrong; } if(list[site2].empty())//如果为空 { deletepart(iname);//清空现场再返回错误信息 return empty_error; } node *searchp2=list[site2].headp->next; while(searchp2!=NULL) { searchp1=list[site1].headp->next; while(searchp1!=NULL) { addnode(site,(searchp1->coeff)*icoeff*(searchp2->coeff),(searchp1->index)+(searchp2->index)); searchp1=searchp1->next; } searchp2=searchp2->next; } } else { deletepart(iname);//清空现场再返回错误信息 return wrong; } break; } i++; } //到现在为止,多项式已经创建成功,下面进行系数项为0的清除工作 followp=list[site].headp; searchp=list[site].headp->next; while(searchp!=NULL) { if(searchp->coeff==0)//系数项为0的清除 { followp->next=searchp->next; delete searchp; searchp=followp; } followp=searchp; searchp=searchp->next; } if(list[site].headp->next==NULL)//多项式为0的情况 { searchp=new node(0,0);//附加一个0项 list[site].headp->next=searchp; searchp->next=NULL; } cout<<endl<<"新建多项式信息整理后如下:"<<endl; display(iname);//多项式显示 return success; } return fail; } void sequelist::displayname(void)//显示系统中现存多项式的名称 { int j=0; cout<<"系统当前存在多项式的名称有:"<<endl; for(int i=0;i<Maxsize;i++) { if(!list[i].empty()) { cout<<setw(4)<<char(i+'A'); j++; if((j+1)%8==0)//每行显示7个多项式名称 cout<<endl; } } cout<<endl<<"◇◇共"<<j<<"个多项式信息!"<<endl<<endl; } void sequelist::addnode(int site,int icoeff,int iindex)//增加项 { node *newnode,*searchp,*followp; if(list[site].empty())//如果为空 { newnode= new node(icoeff,iindex); list[site].headp->next=newnode; newnode->next=NULL; } else { followp=list[site].headp; searchp=list[site].headp->next; if(order==1)//降序显示 { while(searchp!=NULL&&searchp->index>iindex) { followp=searchp; searchp=searchp->next; } } else//升序显示 { while(searchp!=NULL&&searchp->index>iindex) { followp=searchp; searchp=searchp->next; } } if(searchp!=NULL&&searchp->index==iindex) { searchp->coeff+=icoeff;//同类项合并 } else//非同类项则按序插入 { newnode=new node(icoeff,iindex); newnode->next=searchp; followp->next=newnode; } } } void sequelist::traveral(void)//遍历所有多项式 { int j=0; for(int i=0;i<Maxsize;i++) { if(!list[i].empty()) { display(char(i+'A')); j++; } } cout<<"系统中现有多项式个数为:"<<j<<endl; } bool sequelist::findlist(char idata)//查找多项式(提供多项式名称) { int site; site=int(idata-'A'); if(list[site].empty()) return false; else { display(idata); return true; } } bool sequelist::scanname(char idata)//判断多项式的名称是否合法 { if(idata>='A'&&idata<='Z') { int site; site=int(idata-'A'); if(!list[site].empty()) { cout<<"对不起,多项式"<<idata<<"已经存在!"<<endl; display(idata); return false; } else { cout<<"恭喜!多项式名称通过检验!请继续..."<<endl; return true; } } cout<<"对不起,您输入的多项式名称格式不正确!"<<endl; return false; } /* 定义一个实现多项式功能的菜单处理类interfacebase */ class interfacebase { private: sequelist listonface; public: void clearscreen(void);//清屏 void showmenu(void);//显示菜单函数 int userchoice(void);//用户的选项 returninfo processmenu(int menuchoice);//菜单函数 }; void interfacebase::clearscreen(void) { system("cls"); } void interfacebase::showmenu(void) { cout<<"单链表实现多项式的功能菜单"<<endl; cout<<"=========================="<<endl; cout<<"1.输入多项式(从键盘输入)"<<endl; cout<<"2.显示多项式(遍历所有多项式)"<<endl; cout<<"3.清空多项式信息"<<endl; cout<<"4.赋值计算"<<endl; cout<<"5.显示某个多项式"<<endl; cout<<"6.显示系统中现存多项式的名称"<<endl; cout<<"7.查找多项式(提供多项式名称)"<<endl; cout<<"0.退出程序"<<endl; cout<<"=========================="<<endl; } int interfacebase::userchoice(void) { int menuchoice; cout<<"请输入您的选择:"; cin>>menuchoice; return menuchoice; } returninfo interfacebase::processmenu(int menuchoice) { int position,item,returnvalue; char name; switch(menuchoice)//根据用户的选择进行相应的操作 { case 1: returnvalue=listonface.inputdata(); if(returnvalue==fail) cout<<"对不起,您输入的多项式名称格式不正确!请按任意键继续..."<<endl; else if(returnvalue==wrong) cout<<"对不起,该项多项式错误(或者为空),已删除!请按任意键继续..."<<endl; else if(returnvalue==empty_error) cout<<"对不起,该项多项式为空!请按任意键继续..."<<endl; else cout<<"输入多项式操作成功!请按任意键继续..."<<endl; break; case 2: listonface.traveral(); cout<<"多项式遍历操作成功!请按任意键继续..."<<endl; break; case 3: returnvalue=listonface.deletdata(); if(returnvalue==fail) cout<<"操作取消!请按任意键继续..."<<endl; else if(returnvalue==wrong) cout<<"对不起,该项多项式为空!请按任意键继续..."<<endl; else cout<<"清除操作成功!请按任意键继续..."<<endl; break; case 4: returnvalue=listonface.calculate(); if(returnvalue==wrong) cout<<"对不起,该项多项式为空!请按任意键继续..."<<endl; else if(returnvalue==fail) cout<<"操作取消!请按任意键继续..."<<endl; else cout<<"赋值计算操作成功!请按任意键继续..."<<endl; break; case 5: cout<<"请输入要显示的多项式名称:"; cin>>name; listonface.display(name); cout<<"显示某个多项式操作成功!请按任意键继续..."<<endl; break; case 6: listonface.displayname(); cout<<"显示系统中现存多项式的名称操作成功!请按任意键继续..."<<endl; break; case 7: cout<<"请输入要查找的多项式名称:"; cin>>name; listonface.findlist(name); if(true) cout<<"查找多项式操作成功!请按任意键继续..."<<endl; else cout<<"该多项式为空(不存在)!请按任意键继续..."<<endl; break; case 0: exit(0); default: cout<<"对不起,您输入的功能编号有错!请重新输入!!!"<<endl; break; } return success; } /* 程序主入口 */ void main(void) { int menuchoice;//定义变量,菜单选单项的选择 interfacebase interfacenow; sequelist sequelistnow; system("color f0");//修改屏幕的背景色和字的颜色 interfacenow.clearscreen();//清屏 while(1)//永真循环 { interfacenow.showmenu();//显示菜单 menuchoice=interfacenow.userchoice();//获取用户的选择 interfacenow.processmenu(menuchoice);//处理用户的选择 system("pause");//暂停 interfacenow.clearscreen();//清屏 } }//主函数结束 ```

有一道关于单链表的题,今天考试对于小白来说太难了,希望有大神能帮忙解一下

模拟手机通讯录管理系统,实现对通讯录进行管理。需要对联系人姓名、电话进行管理,利用结构体变量记录联系人的姓名、电话,建立单向链表来存放联系人的信息。 要求实现如下功能: (1)写函数create()实现建立单链表来存放联系人的信息,如果输入大写‘Y’字符则继续创建结点存储联系人信息,否则按任意键结束输入。 (2)写自定义函数输出链表中联系人信息。 (3)写自定义函数查询联系人的信息。 (4)写自定义函数释放链表所占内存。 (在主函数依次调用各函数即可) 结构体类型定义如下: struct friends{ char name[20]; char phone[12]; struct friends*next; }; 程序运行示例1: 请依次输入每个联系人姓名,电话: wu 13623456 是否继续输入,按Y键继续输入,其他键就结束. Y 请依次输入每个联系人姓名,电话: zhang 34567812 是否继续输入,按Y键继续输入,其他键就结束. Y 请依次输入每个联系人姓名,电话: zhao 891234 是否继续输入,按Y键继续输入,其他键就结束. 输出所有联系人信息为:姓名 电话 wu 13623456 zhang 34567812 zhao 891234 请输入要查找联系人姓名: li 不存在此联系人 程序运行示例2: 请依次输入每个联系人姓名,电话: wu 13623456 是否继续输入,按Y键继续输入,其他键就结束. Y 请依次输入每个联系人姓名,电话: zhang 34567812 是否继续输入,按Y键继续输入,其他键就结束. Y 请依次输入每个联系人姓名,电话: zhao 891234 是否继续输入,按Y键继续输入,其他键就结束. 输出所有联系人信息为:姓名 电话 wu 13623456 zhang 34567812 zhao 891234 请输入要查找联系人姓名: wu 该联系人的姓名:wu 电话:13623456 输入提示:"请依次输入每个联系人姓名,电话: \n" 输入格式:"%s %s" 输入提示:"是否继续输入,按Y键继续输入,其他键就结束.\n" 输入提示:"请输入要查找联系人姓名:\n" 输入格式:%s 输出提示:"输出所有联系人信息为:姓名 电话\n" 输出格式:"%s %s\n" 查找输出提示:找到了则输出:"该联系人的姓名:%s 电话:%s \n" 找不到则输出提示:"不存在此联系人\n"

c语言 自己写的zz代码不知道怎么连续输入链表每一个节点的数据 求大佬帮忙

#include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> //定义全局变量 int isEmpty=0;//标志,判断链表是否为空 //!!!定义单链表结构体!!! typedef struct Node{ int NUM;//类型总数 int NAME;//各类型名称 int num; //各类型下的货物总数 struct Node*next; }Node; //函数声明 Node*create(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(Node*L); //========新增加的函数======== Node*append(Node*L); //主函数 void main() { 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:append(L);break; case 3:;break; case 4:;break; case 5:;break; case 6:;break; case 7:;break; default:printf("input error!\nplaese input1-7"); } } } //函数 //1.创建链表节点 Node*create(Node*L) { Node*pTail=L; L->next=NULL; Node*p; p=(Node*)malloc(sizeof(Node)); if(p==NULL) { printf("申请内存空间失败!\n"); } //利用尾插建立单链表 pTail->next=p; p->next=NULL; pTail=p; } //2.增加货物类型 Node*append(Node*L) { }

求大侠帮忙:C语言程序设计---编程题(以下所有题目程序应是非递归的)

1. 编写一个函数insert(s1,s2,ch),实现在字符串s1中的指定字符ch位置处插入字符串s2. 2. 学校工会组织活动,要求有8名教师参加,这8名教师将分别从A学院3名教师、B学院5名教师、C学院6名教师中任意抽取,且其中必须有B学院的教师参加,请编程输出所有可能的方案 3. 已知在C盘根目录下存有文本文件“file1.txt”,编程统计文件“file1.txt”中每个字母字符和每个数字字符出现的频率,在屏幕上显示统计结果,并将统计结果写入磁盘文件“file2.txt”中 4. 输入一个字符串,内有数字和非数字字符,如:AS234fgh456d 17968x7654,将其中连续的数字作为一个整体,依次存放到一数组a中,例如234存入a[0],456存入a[1],…,编程统计其共有多少个整数,并输出这些数。要求: 1) 编写函数完成将字符串中连续的数字作为一个整体,依次存放到一数组a中 2) 在主函数中完成数据的输入与结果的输出 5. 按由大到小的顺序对一个含有N个整型数据的数组A[N]进行排序,利用如下改进的选择排序方法:第一次选出最大者存入A[1],第二次选出最小者存入A[N],第三次选出次大者存入A[2],第四次选出次小者存入A[N-1],如此大小交替地选择,直到排序完成。要求: 1) 编写函数sort完成排序 2) 在主函数中完成数据的输入与结果的输出 6. 已知用两个单链表分别存储的两个字符串,均按递增次序排列。编程实现将这两个单链表归并为一个按数据域值递减次序排列的单链表。要求: 1) 单链表中每个结点只存放一个字符 2) 利用原链表中的结点空间存储归并后的单链表,不另外生成新链表 3) 单链表的建立写一函数create实现 4) 两个链表归并过程写一函数sub实现 5) 输出结果写一函数output实现 6) 主函数调用这三个函数完成程序功能

数据结构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 ); } ``` 第一个特别输入 其他 找到位置,然后插入,排序一个插入一个。 调试调试吧。 再次说一下,步骤应该是没有问题的。(除了插在开头的情况会出现错误)调试了很多数据了。感觉问题应该出在指针返还上面。

C语言在指定位置插入数据

![![图片说明](https://img-ask.csdn.net/upload/201703/27/1490577351_656816.png)图片说明](https://img-ask.csdn.net/upload/201703/27/1490577343_810246.png) 把一行的数据添加到<body></body>中

请问建立链表并赋值,再遍历输出,输出的结果带有一串乱码是为什么呢?

建立链表并赋值后遍历输出,输出的结果带有一串乱码是为什么呢? (刚学链表懵懵懂懂求解答,谢谢~) _代码如下——_ #include<stdio.h> #include<stdlib.h> struct node{ int data;//数据域 struct node* next;//指针域 }; int main() { int n,i;//确定链表长度 struct node *head=(struct node*)malloc(sizeof(struct node));//创建头结点 struct node *p=(struct node*)malloc(sizeof(struct node));//申请第一个结点 head->next=p;//连接头结点和首结点 p->next=NULL; printf("please input the length:\n"); scanf("%d",&n); printf("input the number:\n"); for(i=0;i<n;i++) { struct node* s=(struct node*)malloc(sizeof(struct node));//创建并给结点s分配内存 scanf("%d",&s->data);//尾插法 p->next=s; s->next=NULL; p=s; } p=head; while(p!=NULL)//遍历输出 { printf("%-10d",p->next->data); p=p->next; } return 0; } 结果: ![图片说明](https://img-ask.csdn.net/upload/201904/22/1555947188_8168.png)

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

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

Vue + Spring Boot 项目实战(十九):Web 项目优化解决方案

快来一起探索如何打脸我们的破项目,兄弟姐妹们把害怕打在公屏上!

你连存活到JDK8中著名的Bug都不知道,我怎么敢给你加薪

CopyOnWriteArrayList.java和ArrayList.java,这2个类的构造函数,注释中有一句话 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public ArrayList(Collection&lt;? ...

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

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

CSDN:因博主近期注重写专栏文章(已超过150篇),订阅博主专栏人数在突增,近期很有可能提高专栏价格(已订阅的不受影响),提前声明,敬请理解!

CSDN:因博主近期注重写专栏文章(已超过150篇),订阅博主专栏人数在突增,近期很有可能提高专栏价格(已订阅的不受影响),提前声明,敬请理解! 目录 博客声明 大数据了解博主粉丝 博主的粉丝群体画像 粉丝群体性别比例、年龄分布 粉丝群体学历分布、职业分布、行业分布 国内、国外粉丝群体地域分布 博主的近期访问每日增量、粉丝每日增量 博客声明 因近期博主写专栏的文章越来越多,也越来越精细,逐步优化文章。因此,最近一段时间,订阅博主专栏的人数增长也非常快,并且专栏价

一个HashMap跟面试官扯了半个小时

一个HashMap能跟面试官扯上半个小时 关注 安琪拉的博客 1.回复面试领取面试资料 2.回复书籍领取技术电子书 3.回复交流领取技术电子书 前言 HashMap应该算是Java后端工程师面试的必问题,因为其中的知识点太多,很适合用来考察面试者的Java基础。 开场 面试官: 你先自我介绍一下吧! 安琪拉: 我是安琪拉,草丛三婊之一,最强中单(钟馗不服)!哦,不对,串场了,我是**,目...

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

记录下入职中软一个月(外包华为)

我在年前从上一家公司离职,没想到过年期间疫情爆发,我也被困在家里,在家呆着的日子让人很焦躁,于是我疯狂的投简历,看面试题,希望可以进大公司去看看。 我也有幸面试了我觉得还挺大的公司的(虽然不是bat之类的大厂,但是作为一名二本计算机专业刚毕业的大学生bat那些大厂我连投简历的勇气都没有),最后选择了中软,我知道这是一家外包公司,待遇各方面甚至不如我的上一家公司,但是对我而言这可是外包华为,能...

面试:第十六章:Java中级开发

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

培训班出来的人后来都怎么样了?(二)

接着上回说,培训班学习生涯结束了。后面每天就是无休止的背面试题,不是没有头脑的背,培训公司还是有方法的,现在回想当时背的面试题好像都用上了,也被问到了。回头找找面试题,当时都是打印下来天天看,天天背。 不理解呢也要背,面试造飞机,上班拧螺丝。班里的同学开始四处投简历面试了,很快就有面试成功的,刚开始一个,然后越来越多。不知道是什么原因,尝到胜利果实的童鞋,不满足于自己通过的公司,嫌薪水要少了,选择...

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

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

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

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

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

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

工作八年,月薪60K,裸辞两个月,投简历投到怀疑人生!

近日,有网友在某职场社交平台吐槽,自己裸辞两个月了,但是找工作却让自己的心态都要崩溃了,全部无果,不是已查看无回音,就是已查看不符合。 “工作八年,两年一跳,裸辞两个月了,之前月薪60K,最近找工作找的心态崩了!所有招聘工具都用了,全部无果,不是已查看无回音,就是已查看不符合。进头条,滴滴之类的大厂很难吗???!!!投简历投的开始怀疑人生了!希望 可以收到大厂offer” 先来看看网...

大牛都会用的IDEA调试技巧!!!

导读 前天面试了一个985高校的实习生,问了他平时用什么开发工具,他想也没想的说IDEA,于是我抛砖引玉的问了一下IDEA的调试用过吧,你说说怎么设置断点...

都前后端分离了,咱就别做页面跳转了!统统 JSON 交互

文章目录1. 无状态登录1.1 什么是有状态1.2 什么是无状态1.3 如何实现无状态1.4 各自优缺点2. 登录交互2.1 前后端分离的数据交互2.2 登录成功2.3 登录失败3. 未认证处理方案4. 注销登录 这是本系列的第四篇,有小伙伴找不到之前文章,松哥给大家列一个索引出来: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门 Spring Security,别再问密...

97年世界黑客编程大赛冠军作品(大小仅为16KB),惊艳世界的编程巨作

这是世界编程大赛第一名作品(97年Mekka ’97 4K Intro比赛)汇编语言所写。 整个文件只有4095个字节, 大小仅仅为16KB! 不仅实现了3D动画的效果!还有一段震撼人心的背景音乐!!! 内容无法以言语形容,实在太强大! 下面是代码,具体操作看最后! @echo off more +1 %~s0|debug e100 33 f6 bf 0 20 b5 10 f3 a5...

程序员是做全栈工程师好?还是专注一个领域好?

昨天,有位大一的同学私信我,说他要做全栈工程师。 我一听,这不害了孩子么,必须制止啊。 谁知,讲到最后,更确定了他做全栈程序员的梦想。 但凡做全栈工程师的,要么很惨,要么很牛! 但凡很牛的,绝不是一开始就是做全栈的! 全栈工程师听起来好听,但绝没有你想象的那么简单。 今天听我来给你唠,记得帮我点赞哦。 一、全栈工程师的职责 如果你学习编程的目的只是玩玩,那随意,想怎么学怎么学。...

不要再到处使用 === 了

我们知道现在的开发人员都使用 === 来代替 ==,为什么呢?我在网上看到的大多数教程都认为,要预测 JavaScript 强制转换是如何工作这太复杂了,因此建议总是使用===。这些都...

什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站?00后的世界我不懂!

A站 AcFun弹幕视频网,简称“A站”,成立于2007年6月,取意于Anime Comic Fun,是中国大陆第一家弹幕视频网站。A站以视频为载体,逐步发展出基于原生内容二次创作的完整生态,拥有高质量互动弹幕,是中国弹幕文化的发源地;拥有大量超粘性的用户群体,产生输出了金坷垃、鬼畜全明星、我的滑板鞋、小苹果等大量网络流行文化,也是中国二次元文化的发源地。 B站 全称“哔哩哔哩(bilibili...

十个摸鱼,哦,不对,是炫酷(可以玩一整天)的网站!!!

文章目录前言正文**1、Kaspersky Cyberthreat real-time map****2、Finding Home****3、Silk – Interactive Generative Art****4、Liquid Particles 3D****5、WINDOWS93****6、Staggering Beauty****7、Ostagram图片生成器网址****8、全历史网址*...

终于,月薪过5万了!

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

用了这个 IDE 插件,5分钟解决前后端联调!

点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!作者 |李海庆我是一个 Web 开发前端工程师,受到疫情影响,今天是我在家办公的第78天。开发了两周,...

大厂的 404 页面都长啥样?最后一个笑了...

每天浏览各大网站,难免会碰到404页面啊。你注意过404页面么?猿妹搜罗来了下面这些知名网站的404页面,以供大家欣赏,看看哪个网站更有创意: 正在上传…重新上传取消 腾讯 正在上传…重新上传取消 网易 淘宝 百度 新浪微博 正在上传…重新上传取消 新浪 京东 优酷 腾讯视频 搜...

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

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

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

Java14 新特性解读

Java14 已于 2020 年 3 月 17 号发布,官方特性解读在这里:https://openjdk.java.net/projects/jdk/14/以下是个人对于特性的中文式...

前端还能这么玩?(女朋友生日,用前端写了一个好玩的送给了她,高兴坏了)

前端还能这么玩?(女朋友生日,用前端写了一个好玩的送给了她,高兴坏了)

爬虫(101)爬点重口味的

小弟最近在学校无聊的很哪,浏览网页突然看到一张图片,都快流鼻血。。。然后小弟冥思苦想,得干一点有趣的事情python 爬虫库安装https://s.taobao.com/api?_ks...

工作两年简历写成这样,谁要你呀!

作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获! 一、前言 最近有伙伴问小傅哥,我的简历怎么投递了都没有反应,心里慌的很呀。 工作两年了目前的公司没有什么大项目,整天的维护别人的代码,有坑也不让重构,都烦死了。荒废我一身技能无处施展,投递的简历也没人看。我是不动物园里的猩猩,狒狒了! 我要加班,我要996,我要疯狂编码,求给我个机会… ...

相关热词 c# cad插入影像 c#设计思想 c#正则表达式 转换 c#form复制 c#写web c# 柱形图 c# wcf 服务库 c#应用程序管理器 c#数组如何赋值给数组 c#序列化应用目的博客园
立即提问