C#单链表添加元素时局部变量为什么会影响整个链表?

图片说明

初学数据结构,学单链表的时候发现,选中的这部分Add方法里用到了局部变量temp,为什么对这个局部变量的操作会影响链表的结果,局部变量不是应该只在这个方法中有效吗?

c#

1个回答

Node temp = head;这句代码已经把temp指向了head,所以你对temp做的任何操作都相当于是对head做的

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
请问如何才能打印出单链表中的元素的值?
#include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct LNode{ int data; struct LNode *next;//一个指向LNode类型结构的指针变量 (指针域) }LNode,*LinkList; //单链表初始化 int InitList_L(LinkList &L){ L = (LinkList)malloc( sizeof(LNode) ); L->next = NULL; //先建一个带头节点的单链表 printf("单链表初始化成功!\n"); return 0; } //头插法创建链表 int CreateList_L(LinkList &L,int n){ LinkList p;//起始位置 for(int i = n;i > 0;i--){ p = (LinkList)malloc( sizeof(LNode) ); //生成新结点 scanf("%d",p->data); p->next = L->next; L->next = p; } printf("创建成功!\n"); return 0; } //查找第i个元素 int GetElem_L(LinkList &L,int i){ LinkList p; p = L->next; int j = 1; int e; while(p && j < i){ p = p->next; j++; } if(!p || j > i){ printf("第%d个元素不存在\n",i); } e = p->data; printf("查找元素为:%d\n",e); return 0; } //第i个位置插入元素 int ListInsert_L(LinkList &L,int i,int e){ LinkList p = L; LinkList s; int j = 0; while(p && j < i-1){ p = p->next; j++; } if(!p || j > i-1){ printf("插入错误!\n"); } s = (LinkList)malloc( sizeof(LNode) ); s->data = e; s->next = p->next; p->next = s; printf("插入成功!\n"); return 0; } //删除第i个元素 int ListDelete_L(LinkList &L,int i){ LinkList p = L; LinkList q; int j = 0; int e; while( p->next && j < i-1 ){ p = p->next; j++; } if( !(p->next) || j > i-1 ){ printf("删除错误!\n"); } q = p->next; p->next = q->next; e = q->data; printf("删除成功!\n"); free(q); return 0; } //打印链表 int PrintList_L(LinkList &L){ LinkList p; p = L->next; if(p == NULL){ printf("这是一个空链表!\n"); } while(p){ printf("%d ",p->data); p = p->next; } printf("\n"); return 0; } int main(){ LinkList List; int n;//链表元素个数 int i;//链表元素位置 int e;//链表插入的元素 printf("输入链表元素个数:"); scanf("%d",&n); InitList_L(List); printf("输入链表:\n"); CreateList_L(List,n); printf("链表创建如下:\n"); PrintList_L(List); printf("输入查找的位置:"); scanf("%d",&i); GetElem_L(List,i); printf("输入插入的位置和插入元素:"); scanf("%d %d",&i,&e); ListInsert_L(List,i,e); printf("新链表如下:\n"); PrintList_L(List); printf("输入删除的位置:"); scanf("%d",&i); ListDelete_L(List,i); printf("新链表如下:\n"); PrintList_L(List); return 0; } ![图片说明](https://img-ask.csdn.net/upload/202002/04/1580819821_694608.png)
为什么不允许删除循环单链表中最后一个结点?如何解决?
/*****************************************************/ /* 函数功能:建立一个空的循环单链表 */ /* 函数参数:无 */ /* 函数返回值:指向node类型变量的指针 */ /* 文件名:clnkinit.c,函数名init() */ /*****************************************************/ node *init() /*建立一个空的循环单链表*/ { return NULL; } /******************************************************/ /* 函数功能:获得循环单链表的最后一个结点的存储地址 */ /* 函数参数:指向node类型变量的指针变量head */ /* 函数返回值:指向node类型变量的指针 */ /* 文件名:clnklist.c,函数名:rear() */ /*******************************************************/ node *rear(node *head) { node *p; if(!head)/*循环单链表为空*/ p=NULL; else { p=head;/*从第一个结点开始*/ while(p->next!=head)/*没有到达最后一个结点*/ p=p->next;/*继续向后*/ } return p; } /*****************************************************/ /* 函数功能:输出循环单链表中各个结点的值 */ /* 函数参数:指向node类型变量的指针变量head */ /* 函数返回值:空 */ /* 文件名:clnklist.c,函数名:display() */ /*****************************************************/ void display(node *head) { node *p; if(!head) printf("\n循环单链表是空的!\n"); else { printf("\n循环单链表各个结点的值分别为:\n"); printf("%5d",head->info);/*输出非空表中第一个结点的值*/ p=head->next;/*p指向第一个结点的下一个结点*/ while(p!=head)/*没有回到第一个结点*/ { printf("%5d",p->info); p=p->next; } } }​ /*****************************************************/ /* 函数功能:循环单链表中查找值为x的结点的存储地址 */ /* 函数参数:指向node类型变量的指针变量head */ /* datatype类型的变量x */ /* 函数返回值:指向node类型变量的指针 */ /* 文件名:clnklist.c,函数名:find() */ /*****************************************************/ node *find(node *head,datatype x) { /*查找一个值为x的结点*/ node *q; if(!head) /*循环单链表是空的*/ { printf("\n循环单链表是空的!无法找指定结点!"); return NULL; } q=head;/* q指向循环单链表的第一个结点,准备查找*/ while(q->next!=head&&q->info!=x)/*没有查找到并且没有查找完整个表*/ q=q->next;/*继续查找*/ if(q->info==x) return q; else return NULL; } /*****************************************************/ /* 函数功能:循环单链表第i个结点后插入值为x的新结点*/ /* 函数参数:指向node类型变量的指针变量head */ /* datatype类型的变量x,int类型的变量i */ /* 函数返回值:指向node类型变量的指针 */ /* 文件名:clnklist.c,函数名:insert() */ /*****************************************************/ node *insert(node *head,datatype x,int i) {/*i为0时表示将值为x的结点插入作为循环单链表的第一个结点*/ node *p,*q,*myrear; int j; p=(node*)malloc(sizeof(node));/*分配空间*/ p->info=x;/*设置新结点的值*/ if(i<0)/*如果i小于0,则输出出错信息*/ {printf("\n无法找到指定的插入位置!"); free(p);return head;} if(i==0&&!head) /*插入前循环单链表如果是空的,则新结点的指针域应指向它自己*/ { p->next=p;head=p;return head;} if(i==0&&head) /*在非空的循环单链表最前面插入*/ { myrear=rear(head);/*找到循环单链表的最后一个结点*/ p->next=head; /*插入(1)*/ head=p; /*插入(2)*/ myrear->next=p;/*插入(3)最后一个结点的指针域指向新插入的表中第一个结点*/ return head; } if(i>0&&!head) {printf("\n无法找到指定的插入位置!"); free(p);return head;} if(i>0&&head) {/*在非空的循环单链表中插入值为x的结点,并且插入的结点不是第一个结点*/ q=head;/*准备从表中第一个结点开始查找*/ j=1;/*计数开始*/ while(i!=j&&q->next!=head)/*没有找到并且没有找遍整个表*/ { q=q->next;j++;/*继续查找,计数器加1*/ } if(i!=j)/* 找不到指定插入位置,即i的值超过表中结点的个数,则不进行插入*/ { printf("\n表中不存在第%d个结点,无法进行插入!\n",i);free(p); return head; } else { /*找到了第i个结点,插入x*/ p->next=q->next;/*插入,修改指针(1)*/ q->next=p;/*插入,修改指针(2)*/ return head; } } } /*****************************************************/ /* 函数功能:在循环单链表中删除一个值为x的结点 */ /* 函数参数:指向node类型变量的指针变量head */ /* datatype类型的变量x */ /* 函数返回值:指向node类型变量的指针 */ /* 文件名:clnklist.c,函数名:dele() */ /*****************************************************/ node *dele(node *head,datatype x) { node *pre=NULL,*q;/*q用于查找值为x的结点,pre指向q的前驱结点*/ if(!head)/*表为空,则无法做删除操作*/ { printf("\n循环单链表为空,无法做删除操作!"); return head; } q=head;/*从第1个结点开始准备查找*/ while(q->next!=head&&q->info!=x)/*没有找遍整个表并且没有找到*/ { pre=q; q=q->next;/*pre为q的前驱,继续查找*/ }/*循环结束后,pre为q的前驱*/ if(q->info!=x)/*没找到*/ { printf("没有找到值为%d的结点!",x); } else /*找到了,下面要删除q*/ { if(q!=head){pre->next=q->next;free(q);} else if(head->next==head){free(q);head=NULL; printf("ok1");} else {pre=head->next; while(pre->next!=q) pre=pre->next; /*找q的前驱结点位置*/ head=head->next; pre->next=head; free(q); printf("ok"); } } return head; } /*************************************/ /* 函数功能:循环单链表删除操作测试程序 */ /* 函数参数:无 */ /* 函数返回值:空 */ /* 文件名:test16 函数名:main() */ /*************************************/ #include "stdio.h" #include "conio.h" #include "slnklist.h" #include "clnklist.c" void main() { node *myhead,*tail; myhead=init(); display(myhead); myhead=insert(myhead,33,0); display(myhead); myhead=insert(myhead,55,1); display(myhead); myhead=insert(myhead,22,0); printf("\n\n在循环单链表最前面插入22后的结果为:\n"); /*读者可以在相应的地方加上输出语句,给予适当的提示*/ display(myhead); myhead=insert(myhead,77,3); display(myhead); tail=rear(myhead); printf("\n\n\n使用尾部结点的指针域,打印循环单链表的结果为:\n"); display(tail->next); myhead=dele(myhead,22); display(tail->next);//display(myhead); myhead=dele(myhead,33); display(tail->next);//display(myhead); myhead=dele(myhead,55); display(tail->next); myhead=dele(myhead,77); display(tail->next); getch(); } ![图片说明](https://img-ask.csdn.net/upload/201604/15/1460681850_322856.png)
求助,请问输出函数有什么问题吗?为什么只能输出第二组数据?
/*Q4609.(10分)建立学生成绩管理系统,对学生以下信息: 学号、名字、成绩(语文、数学、外语) 进行管理。要 求利用结构体变量记录每名学生的学号、名字、成绩(语文、数学、外语),并建立单向链表来存放学生的信息。 功能实现要求如下: (1)写函数Append ()实现使用单链表来添加学生的信息。√ (2)写函数DisLink()输出所有学生的信息。 √ (3)写函数Sort()对学生成绩进行排序。 (4)写DeleteMemory()函数释放链表所占内存空间 √ 其中结构体类型定义如下: struct stu { char ID[12];//学号 char name[20];//姓名 int c1;//语文成绩 int c2;//数学成绩 int c3;//英语成绩 struct stu * next; } 测试用例如下: 1 增加数据 2 退出 选择:1 请输入学号:001 请输入名字:张三 请依次输入语文,数学外语成绩:88 89 90 1 增加数据 2 退出 选择:1 请输入学号:0*/ #include<stdio.h> #include<stdlib.h> struct stu { char ID[12];//学号 char name[20];//姓名 int c1;//语文成绩 int c2;//数学成绩 int c3;//英语成绩 struct stu * next; }; struct stu*Append() { struct stu*pHead=NULL,*pNew=NULL,*pTail=NULL; pNew=(struct stu*)malloc(sizeof(struct stu));//给一个stu分配空间! int i=0; int a; printf("1 增加数据\n"); printf("2 退出\n"); printf("选择"); scanf("%d",&a); for(i=0;i<100;i++) { if(a==1) { printf("请输入学号:"); scanf("%s",&pNew->ID); printf("请输入名字:"); scanf("%s",&pNew->name); printf("请依次输入语文,数学,外语成绩:"); scanf("%d%d%d",&pNew->c1,&pNew->c2,&pNew->c3); if(pHead==NULL) pHead=pNew; else pTail->next=pNew; pTail=pNew; pNew->next=NULL; printf("1 增加数据\n"); printf("2 退出\n"); printf("选择"); scanf("%d",&a); getchar(); //吞掉回车,不然的话回车会进入gets.gets直接结束 } else break; } return pHead; } void DisLink(struct stu *pHead) { struct stu*p=pHead; int n=1; printf("序号\t学号\t名字 \t语文\t数学\t外语\t总分\n"); while(p!=NULL) { int sum=p->c1+p->c2+p->c3; printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n",n,p->ID,p->name,p->c1,p->c2,p->c3,sum); p=p->next; n++; } } void Sort(struct stu*pHead) { int n=0; struct stu *p,*q,*t; p=pHead; for(;p!=NULL;p=p->next) { p->next=q; if((p->c1+p->c2+p->c3)>(q->c1+q->c2+q->c3)) { t=p,p=q,q=p; } } /* printf("排序后\n"); printf("序号\t学号\t名字 \t语文\t数学\t外语\t总分\n"); while(p!=NULL) { printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n",n,p->ID,p->name,p->c1,p->c2,p->c3,p->c1+p->c2+p->c3); p=p->next; n++; }*/ } void DeleteMemory(struct stu* pHead) { struct stu *p; while (NULL != pHead) { p = pHead; pHead = pHead->next; free(p); // 下一个节点 free(Pointer); } } int main() { struct stu *p; p=Append(); DisLink(p); Sort(p); printf("排序后"); DisLink(p); DeleteMemory(p); return 0; }
紧急求助,为什么只能输出一组数据?
/*Q4609.(10分)建立学生成绩管理系统,对学生以下信息: 学号、名字、成绩(语文、数学、外语) 进行管理。要 求利用结构体变量记录每名学生的学号、名字、成绩(语文、数学、外语),并建立单向链表来存放学生的信息。 功能实现要求如下: (1)写函数Append ()实现使用单链表来添加学生的信息。√ (2)写函数DisLink()输出所有学生的信息。 √ (3)写函数Sort()对学生成绩进行排序。 (4)写DeleteMemory()函数释放链表所占内存空间 √ 其中结构体类型定义如下: struct stu { char ID[12];//学号 char name[20];//姓名 int c1;//语文成绩 int c2;//数学成绩 int c3;//英语成绩 struct stu * next; } 测试用例如下: 1 增加数据 2 退出 选择:1 请输入学号:001 请输入名字:张三 请依次输入语文,数学外语成绩:88 89 90 1 增加数据 2 退出 选择:1 请输入学号:0*/ #include<stdio.h> #include<stdlib.h> struct stu { char ID[12];//学号 char name[20];//姓名 int c1;//语文成绩 int c2;//数学成绩 int c3;//英语成绩 struct stu * next; }; struct stu*Append() { struct stu*pHead=NULL,*pNew=NULL,*pTail=NULL; pNew=(struct stu*)malloc(sizeof(struct stu));//给一个stu分配空间! int i=0; int a; printf("1 增加数据\n"); printf("2 退出\n"); printf("选择"); scanf("%d",&a); for(i=0;i<100;i++) { if(a==1) { printf("请输入学号:"); scanf("%s",&pNew->ID); printf("请输入名字:"); scanf("%s",&pNew->name); printf("请依次输入语文,数学,外语成绩:"); scanf("%d%d%d",&pNew->c1,&pNew->c2,&pNew->c3); if(pHead==NULL) pHead=pNew; else pTail->next=pNew; pTail=pNew; pNew->next=NULL; printf("1 增加数据\n"); printf("2 退出\n"); printf("选择"); scanf("%d",&a); getchar(); //吞掉回车,不然的话回车会进入gets.gets直接结束 } else break; } return pHead; } void DisLink(struct stu *pHead) { struct stu*p=pHead; int n=1; printf("序号\t学号\t名字 \t语文\t数学\t外语\t总分\n"); while(p!=NULL) { int sum=p->c1+p->c2+p->c3; printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n",n,p->ID,p->name,p->c1,p->c2,p->c3,sum); p=p->next; n++; } } void Sort(struct stu*pHead) { int n=0; struct stu *p,*q,*t; p=pHead; while(p!=NULL) { p->next=q; if((p->c1+p->c2+p->c3)>(q->c1+q->c2+q->c3)) { t=p,p=q,q=p; } p=p->next; } printf("排序后\n"); printf("序号\t学号\t名字 \t语文\t数学\t外语\t总分\n"); while(p!=NULL) { printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n",n,p->ID,p->name,p->c1,p->c2,p->c3,p->c1+p->c2+p->c3); p=p->next; n++; } } void DeleteMemory(struct stu* pHead) { struct stu *p; while (NULL != pHead) { p = pHead; pHead = pHead->next; free(p); // 下一个节点 free(Pointer); } } int main() { struct stu *p; p=Append(); DisLink(p); Sort(p); DeleteMemory(p); return 0; }
求助,为什么只能输入一组数据??
模拟手机通讯录管理系统,实现对通讯录进行管理。 需要对联系人姓名、电话进行管理,利用结构体变量记录联系人的姓名、电话,建立单向链表来存放联系人的信息。 要求实现如下功能: (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键继续输入,其他键就 */ #include<stdio.h> #include<stdlib.h> struct friends { char name[20]; char phone[12]; struct friends*next; }; struct friends*create() { struct friends*pHead=NULL,*pNew=NULL,*pTail=NULL; int i=0; char a; for(i=0;i<100;i++) { printf("请依次输入每个联系人姓名,电话:\n"); pNew=(struct friends*)malloc(sizeof(struct friends*)); gets(pNew->name); gets(pNew->phone); if(pHead==NULL) pHead=pNew; else pTail->next=pNew; pTail=pNew; pNew->next=NULL; printf("是否继续输入,按Y键继续输入,其他键就结束.\n"); a=getchar(); if(a!='Y') break; } return pHead; } int main() { struct friends *p; p=create(); /*while(p!=NULL) { printf("%c %c",p->name,p->phone); p=p->next; }*/ return 0; }
C++单链表定义及简单应用出错
跟着书上做单链表的应用, 首先先建立了一个danlianbiao.h文件 #include <iostream> #include <assert.h> #include <string.h> using namespace std; template <class type> class ablist { public: int Getlength() {return length;} virtual type Get(int i); virtual bool Set(type x,int i)=0; virtual void MakeEmpty()=0; virtual bool Insert(type value,int i)=0; virtual type Remove(int i)=0; virtual type Remove1(type value)=0; protected: int length; }; //抽象节点类 template <class type> class ListNode { public: ListNode() { next=NULL; } ListNode(const type & item,ListNode <type> *next1=NULL) { data=item; next=next1; } type data; ListNode <type> *next; }; //抽象链表类 template <class type> class ablinklist:public ablist <type> { public: ListNode<type> *GetHead() { return head; } ListNode <type> *GetNext(ListNode<type> & n) { return n.next==head?n.next->next:n.next; } type Get(int i); bool Set(type x,int i); ListNode<type> *Find1(type value); ListNode<type> *Find (int i); void MakeEmpty(); virtual bool Insert(type value, int i)=0; virtual type Remove(int i)=0; virtual type Remove1(type value)=0; protected: ListNode <type> *head; }; //设值函数 template <class type> bool ablinklist<type>::Set(type x,int i) { ListNode<type> *p=Find(i); if(p==NULL||p==head) return false; else p->data=x; return true; } //取值函数 template <class type> type ablinklist<type> ::Get(int i) { ListNode<type> *p=Find(i); assert(p&&p!=head); return p->data; } //清空链表函数 template <class type> void ablinklist<type>::MakeEmpty() { ListNode<type> *q=head->next; int i=1; while(i++<=length) { head->next=q->next; delete q; q=head->next; } length=0; } //搜索值为value的结点 template <class type> ListNode <type> *ablinklist <type>::Find1(type value) { ListNode<type> *p=head->next; int i=1; while (i++<=length && p->data!=value) p=p->next; return p; } //定位函数 template <class type> ListNode <type> *ablinklist<type>::Find(int i) { if(i<0||i>length) return NULL; if(i==0) return head; ListNode <type> *p =head->next; int j=1; while(p!=NULL&&j<i) { p=p->next; j++; } return p; } //单链表类的定义 template <class type> class List:public ablinklist<type> { public: List() { head=new ListNode<type>; length=0; } List(List <type> & l) { Copy(l); } ~List() { MakeEmpty();delete head; } bool Insert(type value,int i); type Remove(int i); type Remove1(type value); List <type> &Copy(List <type> & l); List <type> &operator =(List <type> &l); friend ostream &operator <<(ostream &, List <type> &); }; //在第i个位置插入一个结点 template <class type> bool List <type>::Insert(type value,int i) { ListNode<type> *p=Find(i-1); if(p==NULL) return false; ListNode <type> *newnode =new ListNode <type>(value,p->next); assert(newnode); p->next=newnode; length++; return true; } //删除指定位置i处的结点 template <class type> type List <type>::Remove(int i) { ListNode <type> *p=Find(i-1),*q; assert(p&&p->next); q=p->next; p->next=q->next; type value=q->data; delete q; length --; return value; } //删除元素值为value的结点 template <class type> type List <type>::Remove1(type value) { ListNode<type> *q,*p=head; while (p->next!=NULL&&p->next->data!=value) p=p->next; assert(p->next); q=p->next; p->next=q->next; delete q; length--; return value; } //拷贝链表 template <class type> List <type> &List <type>::Copy(List<type> & l) { ListNode <type> *q,*p,&r; length=l.length; head=NULL; if(!l.head) return *this; head=new ListNode <type>; if(!head) head->data=(l.head)->data; head->next=NULL; r=NULL;p=head; q=l.head->next; while (q) { r=new ListNode <type>; if(!r) return *THIS; r->data=q->data; r->next=NULL; p->next=r; p=p->next; q=q->next; } return *this; } //重载赋值运算符 template <class type> List <type> & List <type>::operator=(List <type> &l) { if(head) MakeEmpty(); Copy(l); return *this; } template <class type> ostream & operator <<(ostream &out,List <type> & l) { ListNode <type> *p=l.head->next; out<<"lrngth:"<<l.length<<"\ndata:"; while(p) { out<<p->data<<" "; p=p->next; } out<<"\n"; return out; } 然后建立.cpp文件,下面是我从书上一大段代码里面选了一部分写的。 //#include "lianbiao.h" #include <iostream> #include "danlianbiao.h" #include "assert.h" #include "string.h" #include "stdio.h" using namespace std; struct term{ int coef; int exp; bool operator!=(term & t) {return coef!=t.coef||exp!=t.exp;} friend ostream &operator <<(ostream &out,term &t) { out<<t.coef<<"x"<<t.exp<<" ";return out; } friend istream &operator>>(istream &in,term &t) { in>>t.coef>>t.exp;return in;} }; void main() { List <term> polya,polyb,polyc; term ta,tb,t; int na,nb; int i,j; cout<<"a多项式共有多少项?\n"; cin>>na; cout<<"按指数从大到小的顺序,依次输入各项系数、指数\n"; for(i=1;i<na;i++) { cout<<"\n第"<<i<<"项:"; cin>>t; polya.Insert(t,i); } cout<<"b多项式共有多少项?\n"; cin>>nb; cout<<"按恪?指?数簓从洙?大洙?到?小?的?顺3序ò,\n依皑?次?输?入?各÷项?系μ数簓、¢指?数簓。£\n"; for(i=1;i<=nb;i++) { cout<<"\n第台"<<i<<"项?:阰"; cin>>t; polyb.Insert(t,i); } cout<<"\npolya:"; cout<<polya; cout<<"\npolyb"; cout<<polyb; } 结果是无法运行,报错如下 d:\新建文件夹\chapter1\chapter1\polynomial_lianbiao.cpp(27): warning C4101: “ta”: 未引用的局部变量 1>d:\新建文件夹\chapter1\chapter1\polynomial_lianbiao.cpp(27): warning C4101: “tb”: 未引用的局部变量 1>d:\新建文件夹\chapter1\chapter1\polynomial_lianbiao.cpp(29): warning C4101: “j”: 未引用的局部变量 1> 正在生成代码... 1>polynomial_lianbiao.obj : error LNK2019: 无法解析的外部符号 "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class List<struct term> &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$List@Uterm@@@@@Z),该符号在函数 _main 中被引用 1>polynomial_lianbiao.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct term __thiscall ablist<struct term>::Get(int)" (?Get@?$ablist@Uterm@@@@UAE?AUterm@@H@Z) 1>D:\新建文件夹\chapter1\Debug\chapter1.exe : fatal error LNK1120: 2 个无法解析的外部命令 1> 1>生成失败。 不知道哪里出的错误,又该如何解决啊??
该程序运行时刀输入序号的时候输入不进去为什么?有大神知道吗
#include<stdio.h> #include<stdlib.h> typedef struct splist { double data; splist *next; } splist; /*单链表创建的思路 1.声明一个指针p和计数器变量i 2.初始化一个空链表L; 3.让L的头结点指针指向NULL, 4.循环; 生成一个新节点赋值给p 将p插入头结点和前一新节点之间 */ void CJ(splist *L,int n) { splist *p; splist *x=L; int i; x=(splist*)malloc(sizeof(splist)); x->next=NULL; double c; scanf("%lf",&c); printf("请开始建表"); for(i=0;i<n;i++) { p=(splist*)malloc(sizeof(splist)); p->data=c; p->next=x->next; x->next=p; } } double FH(splist*L,int i) { double *e; int j; splist*p; splist *x=L; p=x->next; j=1; while(p&&j<i) { p=p->next; j++; } if(!p||j>i) return 0; *e=p->data; return *e; } int main() { splist *L; double c; int m; int x; printf("请输入表的长度"); scanf("%d",&m); CJ(L,m); printf("请输入要返回的序号");//运行时无法输入序号 scanf("%d",&x); c=FH(L,x); printf("%lf",c); return 0; }
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; //} } }
单链表实现多项式怎么改成循环单链表来实现
#include <stdio.h> #include <stdlib.h> //poly数据类型 typedef struct poly { int coef; int expn; struct poly *pnext; } POLY; //初始化表达式 POLY *InitPoly(void) { POLY *phead; if ((phead = (POLY *)malloc(sizeof(POLY))) == NULL) exit(-1); phead->pnext = NULL; return phead; } //输入表达式 void InputPoly(POLY *phead) { int coef,expn; POLY *ptail,*pnew; ptail = phead; while(1) { scanf("%d,%d", &coef, &expn); if (coef != 0) { if ((pnew = (POLY *)malloc(sizeof(POLY))) == NULL) exit(-1); pnew->coef = coef; pnew->expn = expn; ptail->pnext = pnew; ptail = pnew; } else { break; } } ptail->pnext = NULL; } //输出表达式 void OutputPoly(POLY *phead) { POLY *ptemp; ptemp = phead->pnext; if (ptemp == NULL) { printf("\n"); return; } printf("%dx^%d", ptemp->coef, ptemp->expn); ptemp = ptemp->pnext; while(ptemp != NULL) { printf("+%dx^%d", ptemp->coef, ptemp->expn); ptemp = ptemp->pnext; } printf("\n"); } //表达式相加 POLY *AddPoly(POLY *pheadA, POLY *pheadB) { int temp; POLY *pheadC, *pnew, *ptail; //结果链表相关变量 POLY *ptempA, *ptempB; //运算链表相关变量 ptempA = pheadA->pnext; ptempB = pheadB->pnext; pheadC = InitPoly(); ptail = pheadC; //将两个多项式扫描运算后放入结果链表中 while(ptempA != NULL && ptempB != NULL) { //如果指数相等 if (ptempA->expn == ptempB->expn) { if ((temp = ptempA->coef + ptempB->coef) == 0) { ptempA = ptempA->pnext; ptempB = ptempB->pnext; continue; } if ((pnew = (POLY *)malloc(sizeof(POLY))) == NULL) exit(-1); pnew->coef = temp; pnew->expn = ptempA->expn; ptail->pnext = pnew; pnew->pnext = NULL; ptail = pnew; ptempA = ptempA->pnext; ptempB = ptempB->pnext; }//如果多项式A指数小于B else if(ptempA->expn < ptempB->expn) { if ((pnew = (POLY *)malloc(sizeof(POLY))) == NULL) exit(-1); *pnew = *ptempA; pnew->pnext = NULL; ptail->pnext = pnew; ptail = pnew; ptempA = ptempA->pnext; }//如果多项式A指数大于B else { if ((pnew = (POLY *)malloc(sizeof(POLY))) == NULL) exit(-1); *pnew = *ptempB; pnew->pnext = NULL; ptail->pnext = pnew; ptail = pnew; ptempB = ptempB->pnext; } } //将剩余的未扫描项放入结果链表中 while(ptempA != NULL) { if ((pnew = (POLY *)malloc(sizeof(POLY))) == NULL) exit(-1); *pnew = *ptempA; pnew->pnext = NULL; ptail->pnext = pnew; ptail = pnew; ptempA = ptempA->pnext; } while(ptempB != NULL) { if ((pnew = (POLY *)malloc(sizeof(POLY))) == NULL) exit(-1); *pnew = *ptempB; pnew->pnext = NULL; ptail->pnext = pnew; ptail = pnew; ptempB = ptempB->pnext; } return pheadC; } //多项式求导 POLY *DerPoly(POLY *phead) { POLY *ptemp = phead->pnext; POLY *pnew, *pheadX, *ptail; pheadX = InitPoly(); ptail = pheadX; while(ptemp != NULL) { if (ptemp->expn == 0) { ptemp = ptemp->pnext; continue; } if ((pnew = (POLY *)malloc(sizeof(POLY))) == NULL) exit(-1); pnew->coef = ptemp->coef * ptemp->expn; pnew->expn = ptemp->expn - 1; ptail->pnext = pnew; pnew->pnext = NULL; ptail = pnew; ptemp = ptemp->pnext; } return pheadX; } int main(void) { POLY *pheadA, *pheadB, *result; pheadA = InitPoly(); printf("请输入多项式A(系数,指数),需指数递增输入,系数为0时结束输入:\n"); InputPoly(pheadA); pheadB = InitPoly(); printf("请输入多项式B(系数,指数),需指数递增输入,系数为0时结束输入:\n"); InputPoly(pheadB); printf("多项式A:"); OutputPoly(pheadA); printf("多项式B:"); OutputPoly(pheadB); result = AddPoly(pheadA, pheadB); printf("多项式A + 多项式B = "); OutputPoly(result); printf("多项式A求导 = "); result = DerPoly(pheadA); OutputPoly(result); printf("多项式B求导 = "); result = DerPoly(pheadB); OutputPoly(result); return 0; }
C++实现单链表,如何创建一个滑动的指针?
我们老师要求我们做 插入当前结点 的函数。我不太理解这个当前结点的意思。 我的想法是:先让用户search,返回一个指针p,指向某个结点a。然后insertcurrent,就是在a结点后插入新结点。 问题:我怎么把这个指针p传入insertcurrent?? 我在list类里面定义了一个Node*p,执行起来程序会奔溃,如图。 #include <iostream> using namespace std; struct Node{ int data; Node *next; }; class List{ Node *head;//头结点 Node *p;//滑动指针 public: List(){ //构造函数 head=new Node; head->next=NULL; } ~List(){ //析构函数 while(head){ //循环删除 p=head; head=head->next; delete p; } head=NULL; } void CreatList(int n); void InsertCurrent(int item); void InsertHead(int item); void InsertTail(int item); void DeleteCurrent(); void DeleteHead(); void DeleteTail(); int FindCurrent(); int FindK(int k); int Search(int item); void Outputlist(); }; void List::CreatList(int n){ //创建长度为n的链表 Node *p,*s; p=head; cout<<"请依次输入"<<n<<"个元素的值"<<endl; for(int i=0;i<n;i++){ s=new Node; cin>>s->data; s->next=p->next; p->next=s; p=s; } }; void List::InsertCurrent(int item)//插入在当前结点后 { Node *s;//s指向要插入的结点 s=new Node;//动态分配一个新结点 s->data=item;//设item为此结点 s->next=p->next;//s的next指针指向p的后继结点 p->next=s;//p的next指针指向s return; } void List::InsertHead(int item)//插入在表头后 { p=head; Node *s; s=new Node; s->data=item; s->next=p->next; p->next=s; return; } void List::InsertTail(int item)//插入在表尾后 { p=head; int i=0; while (p->next!=NULL) { p=p->next; i++; } Node *s; s=new Node; s->data=item; s->next=NULL; p->next=s; return; } void List::DeleteCurrent()//删除当前结点的后继结点 { Node *q; if(p==NULL){return;} q=p->next; p->next=q->next; delete p; } void List::DeleteHead()//删除表头 { p=head; head=p->next; delete p; } void List::DeleteTail()//删除表尾 { p=head; int i=0; while (p->next!=NULL){ p=p->next; i++; } while (p->next!=NULL){ p=p->next; i++; } p->next=NULL; } int List::FindCurrent()//存取当前结点的值 { int item; item=p->data;// return item; } int List::FindK(int k)//存取第K个结点的值 { int item; if(k<1){return -1;} else{ p=head; int i=0; while(p!=NULL&&i<k){ p=p->next; i++; } if(p==NULL){return -1;} item=p->data; return item; } } int List::Search(int item)//查找结点 { p=head; int i=0; while(p!=NULL&&item==p->data){ p=p->next; i++; } if(p!=NULL){return i;} else{return -1;} } void List::Outputlist()//输出函数 { p = head; while (p != NULL) { cout << p->data<<"->"; p = p->next; } cout << endl; return; } int main() { int n,q, w, e,r,g = 0; List a; cout<<"输入链表长度"<<endl; cin>>n; a.CreatList(n); cout << "创建成功,链表为:"; a.Outputlist(); cout << "请输入插入表头的数:"; cin >> q; a.InsertHead(q); cout << "插入表头后链表为:"; a.Outputlist(); cout << "请输入插入表尾的数:"; cin >> w; a.InsertTail(w); cout << "插入表尾后链表为:"; a.Outputlist(); cout << "请输入插入当前的数:" ; cin >> e; a.InsertCurrent(e); cout << "插入表中后链表为:"; a.Outputlist(); a.DeleteTail(); cout << "删除尾节点后链表为:"; a.Outputlist(); a.DeleteHead(); cout << "删除头节点后链表为:"; a.Outputlist(); a.DeleteCurrent(); cout << "删除头节点后链表为:"; a.Outputlist(); a.FindCurrent(); cout << "请输入想查找的第几个数:"; cin >> r; cout << "查找的第" << r << "个的值为" << a.FindK(r); a.Search(g); ![图片说明](https://img-ask.csdn.net/upload/201710/20/1508488242_878147.png) return 0; }
c语言程序设计-将文件内容赋到一个链表里 然后写一个增加节点的函数 将新增加的节点连到那个链表后面
***********就是功能1和功能2的实现************ #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* delet(Node*L,int del_n); 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"); int x; int n;//初次输入的大小 int del_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:printf("请输入最初的货物类型数量:\n"); scanf("%d",&n); create(n,L); break; case 2: break; case 3:printf("******请输入要删除货物类型的编号:******\n"); scanf("%d",&del_n); printf("删除成功!\n"); delet(L,del_n); break; case 4:;break; case 5:;break; case 6:display(n,L);break; case 7:printf("bye!see you next time!\n"); exit(0); break; default:printf("input error!\nplaese input1-7"); } } } //函数 //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; //} } } //删除货物类型 Node*delet(Node*L,int del_n) { Node *del_p,*p; p = L; del_p = L; if(del_n==1) { L=p->next; free(del_p); } int i; for(i=1;i<del_n-1;i++) { p=p->next; } del_p=p->next; p->next=del_p->next; free(del_p); return L; }
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) { }
单链表的创建及操作(代码已给出)
代码如下,只是自己不知道输入的顺序,有点蒙,希望大神给出运行截图,最好有点解释,谢谢![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/66.gif) #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; }
单链表的创建及其他操作
这是一段代码,但是自己不会运行(搞不清输入顺序,希望大神给个代码运行截图,最好解释一下,谢谢了) #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; }
C++类的问题,成员函数,变量分不清
``` #if !defined_LIST_H_ #define _LIST_H_ //单链表定义 template<class T> //链表节点类的定义 struct LinkNode { T data; //数据域 LinkNode<T>*link; //链指针域 LinkNode(LinkNode<T> *ptr =NULL) {link=ptr;} LinkNode(const T&item,LinkNode<T> *ptr=NULL) { data=item; link=ptr; } }; template<class T> class List { public: List(){first=new LinkNode<T>;} List(const T &x){first= new LinkNode<T>(x);} List(List<T> &L); ~List(){makeEmpty();} void makeEmpty(); int Length() const; LinkNode<T> *getHead()const{return first;} LinkNode<T> *Search(T x); LinkNode<T> *Locate(int i); bool getData(int i,T &x)const; void setData(int i,T &x); bool Insert(int i, T &x); bool Remove(int i, T &x); bool IsEmpty()const { return first->link==NULL?true:false; } bool IsFull()const{return false ;} void Sort(); void inputFrond (T endTag); void output(); List<T>&operator=(List <T>&L); protected: LinkNode<T> *first; }; ``` 下面是我对这个类的理解,有没错啊? List<T>&operator=(List <T>&L);//这句看不懂是什么?? List(List<T> &L);//这句是复制的意思吗? 类List 构造函数: List() List(const T &x) List(List &L) 析构函数: ~List(); 成员函数: makeEmpty() Length() get() Search(T x) Locate(int i) getdata() stdata() insert() remove() isempty() isfull() sort() inputfrond() output() 变量:first
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语言 打印不出来?文件用得对吗
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> #define max 100 //定义全局变量 int isEmpty=0;//标志,判断链表是否为空 //!!!定义单链表结构体!!! <货物类型> typedef struct Node{ char NAME[100];//各类型名称 int NUM; //各类型下的货物总数 struct Node*next; }Node; // 定义单个货物 typedef struct Goods{ char name[100];//货物名称 double price;//货物价格 int num;//货物库存 int id;//所属类型的id }Goods; //函数声明 void Create_File_List(); //创建文件 void add_kinds();//将种类信息录入文件中 Node*CreateList();//创建链表(将信息放到链表中) void Print_List(Node*head);//打印链表 //主函数 void main() { int x; Node *head; if(!(head=(Node *)malloc(sizeof(Node)))) //分配空间 { printf("\n"); exit(1); } Create_File_List();//创建文件 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:Print_List(head);break; case 2:add_kinds(); CreateList(); break; case 3:printf("******请输入要删除货物类型的编号:******\n"); break; case 4:;break; case 5:;break; case 6:;break; case 7:printf("bye!see you next time!\n"); exit(0); break; default:printf("input error!\nplaese input1-7"); } } } //函数 //创建文件是否成功 void Create_File_List() { FILE *fp;//需要在每个函数写这句吗 if ((fp = fopen("storehouse.txt","r"))==NULL) /*如果此文件不存在*/ { if ((fp = fopen("student.txt","w"))==NULL) { printf( "无法建立文件!"); } } } //录入货物信息到文件中 void add_kinds() { FILE*fp; struct Node Node; fp = fopen("storehouse.txt","a+"); Create_File_List(); printf("请输入货物名称:"); scanf("%s",&Node.NAME); printf("请输入货物总数:"); scanf("%d",&Node.NUM); fwrite(&Node,sizeof(Node),1,fp);//这两个fwrite有区别吗 fclose(fp); } //从已经写入的文件中读到链表中(函数功能:创建链表) Node*CreateList() { Node*p,*head,*q;//p指针总是指向新申请的节点,q总是指向尾节点 p=(Node*)malloc(sizeof(Node)); head=p;//开辟头/尾节点内存 (头结点没有信息) q=p; q->next=NULL;//标志链表的结束 FILE*fp; fp=fopen("storehouse.txt","r"); struct Node Node; while(fread(&Node,sizeof(Node),1,fp)!=0)//从文件中读结构块体 { //p=(Node*)malloc(sizeof(Node)); strcpy(p->NAME,Node.NAME); p->NUM=Node.NUM; //下面两句没看懂 q->next=p;//把新节点挂到尾节点后 q=q->next;//q指针指向新的尾节点 //第二句不就是q=p吗? } q->next=NULL;//标志链表的结束 fclose(fp); return head; } //从链表中输出打印到屏幕中数据(输出链表) void Print_List(Node*head) { Node*p; p=head->next;//跳过无数据的头结点 while(p!=NULL) { printf("%s",p->NAME); printf("%d",p->NUM); p=p->next;//指向下一个节点 } } ![图片说明](https://img-ask.csdn.net/upload/201806/01/1527846937_495816.png)
用c写的活期储蓄的程序运行出现发生访问冲突下面为代码请高手指教。
/*用c写的活期储蓄的程序运行出现提示0xC0000005: 读取位置 0xcccccccc 时发生访问冲突下面为代码请高手指教。是不是把链表保存成文件那里有错误?*/ #define _CRT_SECURE_NO_WARNINGS /* 活期储蓄处理中,储户开户、销户、存入、支出活动频繁。设计一个活期储蓄账目管理系统。 【基本要求】 1) 能比较迅速地找到储户的帐户,以实现存款、取款记账; 2) 能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。*/ #include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h> int total = 0; //定义的全局变量,用于开户所需 typedef struct listdata //定义结构体 { char name[20];//用户姓名 int account;//用户账户 char password[15];//用户密码 float money;//账户金额 }listdata; typedef struct node //定义链表节点 { listdata data; struct node *next; }LINK; void InitList(LINK *L) //建立空链表 { L = (LINK *)malloc(sizeof(LINK));//建立头结点 L->next = NULL;//建立空的单链表L } void InsertList(LINK *L) //链表插入实现开户功能 { LINK *s; s = (LINK*)malloc(sizeof(LINK));//建立新节点s printf("请输入你要开户的姓名(20字符以内):"); scanf("%s", s->data.name); s->data.account = 100000 + total++; printf("\n你开户的账号为:%d\n", s->data.account); printf("请输入你账号的密码(15位数以内):"); scanf("%s", s->data.password); s->data.money = 0.00; s->next = NULL; if (L->next == NULL)//头插法 L->next = s; else { s->next = L->next;//将s节点插入表头 L->next = s; } printf("开户成功!\n"); } void DeleteList(LINK*L) //链表删除实现销户功能(需要账号和密码) { LINK *p = L, *q; char pass[15]; int s; printf("请输入你要销户的账号:"); scanf("%d", &s); printf("请输入该账号的密码:"); scanf("%s", pass); while (p->next != NULL) { if (p->next->data.account == s) break; p = p->next; } if (p->next != NULL) { while (strcmp(p->next->data.password, pass) != 0) { printf("密码错误!请重新输入:"); scanf("%s", pass); } q = p->next; p->next = q->next; free(q); printf("账号销户成功。\n"); } else printf("你所要销户的的账号不存在(或者已经销户)!\n"); } void PrintList(LINK *L) //打印链表,实现用户信息输出 { LINK *p = L->next; while (p != NULL) { printf("%s\t", p->data.name); printf("%d\t%s\t%.2f\n", p->data.account, p->data.password, p->data.money); p = p->next; } } void Deposit(LINK*L, LINK *p) //用户存款、取款、查询余额 { int cq; float mn; while (1) { if (p != NULL) { printf("\n请选择:(1)、存款(2)、取款(3)、查询余额(4)、退出账号\n(请输入括号内的数字,输入其它字符默认为取款):"); scanf("%d", &cq); if (cq == 1) { printf("请输入你的存款金额:"); scanf("%f", &mn); p->data.money = p->data.money + mn; printf("存款成功!\n"); } else if (cq == 3) { printf("你账户的余额为:%.2f\n", p->data.money); } else if (cq == 4) { printf("账号退出成功!\n"); return; } else { printf("请输入你的取款金额:"); FH: scanf("%f", &mn); if ((p->data.money - mn) >= 0) { p->data.money = p->data.money - mn; printf("取款成功!\n"); } else { printf("取款失败!\n"); printf("你账户上的金额不足!\n你的账户余额为:%.f\n", p->data.money); printf("请输入合适的取款金额:"); goto FH; } } } } } void Search(LINK *L) //链表查找,实现用户登陆功能 { LINK *p = L->next; int acc; char pass[15]; printf("请输入你要登录的账号:"); scanf("%d", &acc); printf("请输入你的密码:"); scanf("%s", pass); while (p != NULL)//当前表未查完 { if (p->data.account == acc) break; p = p->next; } if (p == NULL) printf("不存在该账户!\n"); else { if (strcmp(p->data.password, pass) == 0) printf("账号登录成功!\n"); else { while (strcmp(p->data.password, pass) != 0) { char pa; printf("密码错误\n"); printf("是否重新输入(是,就输入任意键)、(否,从键盘上输入N or n):"); scanf("\n%c", &pa); if (pa == 'n' || pa == 'N') { system("cls"); return; } printf("\n请重新输入你的密码:"); scanf("%s", pass ); } } Deposit(L, p); } } void save(LINK *L) //保存链表,实现用户信息保存到文件 { LINK *P; FILE *fp; if ((fp = fopen("D:\\vs\\node.text", "wb")) == NULL) { printf("Cannot open file.\n"); exit(1); } LINK *p = L->next; while (p != NULL) { if (fwrite(p, sizeof(struct node), 1, fp) != 1) printf("file write error.\n"); p = p->next; } fclose(fp); } void Print(LINK *L) //打开文件,得到链表 { FILE *fp; LINK *p=NULL, *s; if ((fp = fopen("D:\\vs\\node.text", "rb")) == NULL) { printf("无法读取文件!\n"); exit(1); } s = (LINK*)malloc(sizeof(LINK)); s->next = NULL; while (fread(s, sizeof(struct node), 1, fp)) { total++; //用于记录账号的,以致账号不重复 if (L->next == NULL) { L->next = s; p = s; p->next = s->next; } else { p->next = s; p = s; p->next = s->next; } s = (LINK*)malloc(sizeof(LINK)); s->next = NULL; } fclose(fp); } void menu() //主菜单函数 { printf("\t************欢迎进入活期储蓄账目管理系统***********\n"); printf("\t 1.储户开户 \n"); printf("\t 2.储户销户 \n"); printf("\t 3.储户的账号存款、取款 \n"); printf("\t 4.查看所有储蓄账户信息 \n"); printf("\t 5.退出账目管理 \n"); printf("\t***************************************************\n"); } void choice() //菜单选择函数 { LINK *L=NULL; InitList(L); while (1) { int x; char ch; printf("请选择你需要的功能:"); scanf("%d", &x); if (x>5) printf("输入有误,请重新选择操作:\n"); if (x == 5) break; system("cls"); switch (x) { case 1:InsertList(L); ch = getchar(); break; case 2:DeleteList(L); ch = getchar(); break; case 3:Search(L); ch = getchar(); break; case 4:PrintList(L); ch = getchar(); break; default:break; } } save(L); } void main() { menu(); choice(); }
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(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:create(n,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(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种类型编号:\n",i); scanf("%d",&p->NUM); printf("请输入第%d种类型名称:\n",i); scanf("%s",&p->NAME); printf("请输入第%d种类型库存:\n",i); scanf("%d",&p->num); pTail->next=p; pTail=p; } p->next=NULL; return L; } ![图片说明](https://img-ask.csdn.net/upload/201805/28/1527489393_274380.png) 欢迎下面就运行不了了
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
死磕YOLO系列,YOLOv1 的大脑、躯干和手脚
YOLO 是我非常喜欢的目标检测算法,堪称工业级的目标检测,能够达到实时的要求,它帮我解决了许多实际问题。 这就是 YOLO 的目标检测效果。它定位了图像中物体的位置,当然,也能预测物体的类别。 之前我有写博文介绍过它,但是每次重新读它的论文,我都有新的收获,为此我准备写一个系列的文章来详尽分析它。这是第一篇,从它的起始 YOLOv1 讲起。 YOLOv1 的论文地址:https://www.c
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的 回答 - Bravo Yeung,获得该问题下回答中得最高赞(236赞和1枚专业勋章),对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalk
记一次腾讯面试:进程之间究竟有哪些通信方式?如何通信? ---- 告别死记硬背
有一次面试的时候,被问到进程之间有哪些通信方式,不过由于之前没深入思考且整理过,说的并不好。想必大家也都知道进程有哪些通信方式,可是我猜很多人都是靠着”背“来记忆的,所以今天的这篇文章,讲给大家详细着讲解他们是如何通信的,让大家尽量能够理解他们之间的区别、优缺点等,这样的话,以后面试官让你举例子,你也能够顺手拈来。 1、管道 我们来看一条 Linux 的语句 netstat -tulnp | gr...
20行Python代码爬取王者荣耀全英雄皮肤
引言 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了。我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成。 准备工作 爬取皮肤本身并不难,难点在于分析,我们首先得得到皮肤图片的url地址,话不多说,我们马上来到王者荣耀的官网: 我们点击英雄资料,然后随意地选择一位英雄,接着F12打开调试台,找到英雄原皮肤的图片
网络(8)-HTTP、Socket、TCP、UDP的区别和联系
TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。 一、TCP与UDP的不同 1. 是否需要建立连接。 UDP在传送数据之前不需要先建立连接;TCP则提供面向连接的服务; 2. 是否需要给出确认 对方的传输层在收到UDP报文后,不需要给出任何确认,而 TCP需要给出确认报文,要提供可靠的、面向连接的传输服务。 3.虽然UDP不提供可靠交...
简明易理解的@SpringBootApplication注解源码解析(包含面试提问)
欢迎关注文章系列 ,关注我 《提升能力,涨薪可待》 《面试知识,工作可待》 《实战演练,拒绝996》 欢迎关注我博客,原创技术文章第一时间推出 也欢迎关注公 众 号【Ccww笔记】,同时推出 如果此文对你有帮助、喜欢的话,那就点个赞呗,点个关注呗! 《提升能力,涨薪可待篇》- @SpringBootApplication注解源码解析 一、@SpringBootApplication 的作用是什
防劝退!数据结构和算法难理解?可视化动画带你轻松透彻理解!
大家好,我是 Rocky0429,一个连数据结构和算法都不会的蒟蒻… 学过数据结构和算法的都知道这玩意儿不好学,没学过的经常听到这样的说法还没学就觉得难,其实难吗?真难! 难在哪呢?当年我还是个小蒟蒻,初学数据结构和算法的时候,在忍着枯燥看完定义原理,之后想实现的时候,觉得它们的过程真的是七拐八绕,及其难受。 在简单的链表、栈和队列这些我还能靠着在草稿上写写画画理解过程,但是到了数论、图...
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给
开挂的人生!那些当选院士,又是ACM/IEEE 双料Fellow的华人学者们
昨日,2019年两院院士正式官宣,一时间抢占了各大媒体头条。 朋友圈也是一片沸腾,奔走相告,赶脚比自己中了大奖还嗨皮! 谁叫咱家导师就是这么厉害呢!!! 而就在最近,新一年度的IEEE/ACM Fellow也将正式公布。 作为学术届的顶级荣誉,不自然地就会将院士与Fellow作比较,到底哪个含金量更高呢? 学术君认为,同样是专业机构对学者的认可,考量标准不一,自然不能一概而论。 但...
聊聊C语言和指针的本质
坐着绿皮车上海到杭州,24块钱,很宽敞,在火车上非正式地聊几句。 很多编程语言都以 “没有指针” 作为自己的优势来宣传,然而,对于C语言,指针却是与生俱来的。 那么,什么是指针,为什么大家都想避开指针。 很简单, 指针就是地址,当一个地址作为一个变量存在时,它就被叫做指针,该变量的类型,自然就是指针类型。 指针的作用就是,给出一个指针,取出该指针指向地址处的值。为了理解本质,我们从计算机模型说起...
Python语言高频重点汇总
Python语言高频重点汇总 GitHub面试宝典仓库——点这里跳转 文章目录Python语言高频重点汇总**GitHub面试宝典仓库——点这里跳转**1. 函数-传参2. 元类3. @staticmethod和@classmethod两个装饰器4. 类属性和实例属性5. Python的自省6. 列表、集合、字典推导式7. Python中单下划线和双下划线8. 格式化字符串中的%和format9.
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
代码详解:如何用Python快速制作美观、炫酷且有深度的图表
全文共12231字,预计学习时长35分钟生活阶梯(幸福指数)与人均GDP(金钱)正相关的正则图本文将探讨三种用Python可视化数据的不同方法。以可视化《2019年世界幸福报告》的数据为例,本文用Gapminder和Wikipedia的信息丰富了《世界幸福报告》数据,以探索新的数据关系和可视化方法。《世界幸福报告》试图回答世界范围内影响幸福的因素。报告根据对“坎特里尔阶梯问题”的回答来确定幸...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
(经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
今年正式步入了大四,离毕业也只剩半年多的时间,回想一下大学四年,感觉自己走了不少弯路,今天就来分享一下自己大学的学习经历,也希望其他人能不要走我走错的路。 (一)初进校园 刚进入大学的时候自己完全就相信了高中老师的话:“进入大学你们就轻松了”。因此在大一的时候自己学习的激情早就被抛地一干二净,每天不是在寝室里玩游戏就是出门游玩,不过好在自己大学时买的第一台笔记本性能并不是很好,也没让我彻底沉...
如何写一篇技术博客,谈谈我的看法
前言 只有光头才能变强。 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 我一直推崇学技术可以写技术博客去沉淀自己的知识,因为知识点实在是太多太多了,通过自己的博客可以帮助自己快速回顾自己学过的东西。 我最开始的时候也是只记笔记,认为自己能看得懂就好。但如果想验证自己是不是懂了,可以写成技术博客。在写技术博客的...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)
Redis 面试题 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区别都有哪些? 6、Redis 是单进程单线程的? 7、一个字符串类型的值能存储最大容量是多少? 8、Redis 的持久化机制是什么?各自的优缺点? 9、Redis 常见性...
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
互联网公司的裁员,能玩出多少种花样?
裁员,也是一门学问,可谓博大精深!以下,是互联网公司的裁员的多种方法:-正文开始-135岁+不予续签的理由:千禧一代网感更强。95后不予通过试用期的理由:已婚已育员工更有责任心。2通知接下来要过苦日子,让一部分不肯同甘共苦的员工自己走人,以“兄弟”和“非兄弟”来区别员工。3强制996。员工如果平衡不了工作和家庭,可在离婚或离职里二选一。4不布置任何工作,但下班前必须提交千字工作日报。5不给活干+...
【设计模式】单例模式的八种写法分析
网上泛滥流传单例模式的写法种类,有说7种的,也有说6种的,当然也不排除说5种的,他们说的有错吗?其实没有对与错,刨根问底,写法终究是写法,其本质精髓大体一致!因此完全没必要去追究写法的多少,有这个时间还不如跟着宜春去网吧偷耳机、去田里抓青蛙得了,一天天的....
《面试宝典》:检验是否为合格的初中级程序员的面试知识点,你都知道了吗?查漏补缺
欢迎关注文章系列,一起学习 《提升能力,涨薪可待篇》 《面试知识,工作可待篇》 《实战演练,拒绝996篇》 也欢迎关注公 众 号【Ccww笔记】,原创技术文章第一时间推出 如果此文对你有帮助、喜欢的话,那就点个赞呗,点个关注呗! 《面试知识,工作可待篇》-Java笔试面试基础知识大全 前言 是不是感觉找工作面试是那么难呢? 在找工作面试应在学习的基础进行总结面试知识点,工作也指日可待,欢...
关于研发效能提升的思考
研发效能提升是最近比较热门的一个话题,本人根据这几年的工作心得,做了一些思考总结,由于个人深度有限,暂且抛转引入。 三要素 任何生产力的提升都离不开这三个因素:人、流程和工具,少了其中任何一个因素都无法实现。 人,即思想,也就是古人说的“道”,道不同不相为谋,是制高点,也是高层建筑的基石。 流程,即方法,也是古人说的“法”。研发效能的提升,也就是要提高投入产出比,既要增加产出,也要减...
微博推荐算法简述
在介绍微博推荐算法之前,我们先聊一聊推荐系统和推荐算法。有这样一些问题:推荐系统适用哪些场景?用来解决什么问题、具有怎样的价值?效果如何衡量? 推荐系统诞生很早,但真正被大家所重视,缘起于以”facebook”为代表的社会化网络的兴起和以“淘宝“为代表的电商的繁荣,”选择“的时代已经来临,信息和物品的极大丰富,让用户如浩瀚宇宙中的小点,无所适从。推荐系统迎来爆发的机会,变得离用户更近: 快...
相关热词 c# 时间比天数 c# oracle查询 c# 主动推送 事件 c# java 属性 c# 控制台 窗体 c# 静态类存值 c#矢量作图 c#窗体调用外部程式 c# enum是否合法 c# 如何卸载引用
立即提问