C语言数据结构顺序存储的线性表常用函数的参数传递中*P和P使用情况和一些顺序存储的线性表问题

刚学了C语言的数据结构,有一些问题不懂,或者说有一些认识不知道对不对,想知道真正的情况是怎么样的。
先看这几条语句:
void union(List *La,List Lb) (1)
{
int La_len,Lb_len,i;

ElemType e;
La_len = ListLength(*La); (2)
Lb_len = ListLength(Lb); (3)
for(i=1;i<=Lb_len;i++)
{
GetElem(Lb,i,&e);
if(!LocateElem(*La,e)) (4)
ListInsert(La,++La_len,e);
}
}

                    再看函数原型,是我看的书上的:(L是线性表)
                                        1. InitList(*L);
                                        2. ClearList(*L);                                       
                                        3. ListInsert(*L,i,e);
                                        4. ListDelete(*L,i,*e);
                                        5. ListLength(L);
                                        6. ListEmpty(L);
                                        7. LocateElem(L,e);
                                        8. GetElem(L,i,*e);
问题是: 1.  第一部分语句, union函数的两个参数List *La,List Lb,一个是*La,一个是Lb,  不知道为什么一个是用线性表的指针的地址 *L,一个是用 L 。

                            2.  La_len = ListLength(*La);                 (2)
                               Lb_len = ListLength(Lb);                  (3)
                                     !LocateElem(*La,e) (4)         和第7条原型LocateElem(L,e);
                                    (2)(3)两条语句,用的是同样的函数,一个却是指针地址,一个确实指针指向的值,对应第5条函数原型ListLength(L);是不是这个函数里面的参数既可以是*La也可以是Lb?区别是什么?
                                    (4)的语句第一个参数是*La,而原型第一个参数是L,不知道为什么一个有加*,一个没有加,有错吗,没错的话区别是什么?


                            3. 几个函数原型里面,前4条函数的参数是L,后4条函数参数是(*L),还有e也有这种情况,是为什么??搞不懂什么时候用加*,什么时候不用加,区别是什么

                            4. 顺序线性表的定义跟一个结构体差不多,里面有一个数组存储数据元素,搞不清楚结构体和线性表和数组的区别和联系

                        (老师教C的时候,没怎么听,后来学JAVA了C也忘记差不多了,学C的数据结构感觉熟悉又陌生,有很多不懂的地方,谢谢大家帮忙解答了)

1个回答

 很简单,L是指针,*L是指针的指针。
通过指针,可以修改变量,同时作用到实参,通过指针的指针,可以修改指针,让指针指向另一个对象。
例子
void foo(int a)
{
a = 1;
}
...
a = 2;
foo(a); //此时a还是2,不是1。

要想改变a,需要指针

void foo(int *a)
{
*a = 1;
}
...
a = 2;
foo(&a); //此时a是1。

再看
void foo(int *a)
{
a = new int(1);
}
...
a = null;
foo(&a); //此时a还是null。
要想改变指针,需要指针的指针
void foo(int **a)
{
*a = new int(1);
}
...
a = null;
foo(&a); //此时a指向新的对象。
cout << *a; // 1

看你的代码,显然initlist需要修改指针,所以需要指针的指针。
listlength只是获得长度,不修改指针,只要指针就可以了。L就是指针,
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
请问为什么我写的C语言中顺序存储的线性表的输出有这个错误
调试环境VC6.0 ``` #include<stdlib.h> #include<stdio.h> typedef int Status; // Status 是函数返回值类型,其值是函数结果状态代码。 #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define List_Init_Size 100 //线性表存储空间初始分配量 #define Listincerment 10 //线性表存储空间的分配增量 typedef struct SqList { int *elem; int length; int listsize; //当前分配的存储容量() }SqList; Status InitList_Sq(SqList*L) {//初始化顺序线性表// L->elem=(int*)malloc(List_Init_Size*sizeof(int)); if(!L->elem)exit(OVERFLOW); //存储分配失败 L->length=0; return OK; } Status ListInsert_Sq(SqList *L, int i, int e) { //i位置之前插入新元素e if(i<1||i>L->length+1)return ERROR; if((L->length)>=(L->listsize)){ //当前存储空间已满,增加分配 int*newbase,*q,*p; newbase=(int*)realloc(L->elem,(L->listsize+Listincerment)*sizeof(int)); if(!newbase)exit(OVERFLOW);//存储分配失败} L->elem=newbase; //新的基址 L->listsize+=Listincerment; //增加容器容量 q=&(L->elem[i-1]); //q为插入位置 for(p=&(L->elem[L->length-1]);p>=q;--p) *(p+1)=*p; //插入位置及以后的元素后移 *q=e; //插入e ++L->length; } return OK;} void output(SqList L) { int i; for(i=0;i<L.length;i++) { printf("%d ",&L.elem[i]); } } void main() { SqList a; int i,j; InitList_Sq(&a); printf("输入要写入链表a中元素的个数"); scanf("%d",&j); printf("输入每个元素"); for(i=1;i<=j;i++) //小于等于 { int e; scanf("%d",&e); ListInsert_Sq(&a,i,e); } output(a); } ``` ![图片说明](https://img-ask.csdn.net/upload/201912/02/1575260361_988221.png)
数据结构上的一个线性表的冲突的解决,是不是用哈希算法怎么采用C语言的实现方式
数据结构上的一个线性表的冲突的解决,是不是用哈希算法怎么采用C语言的实现方式
C语言中顺序线性表的合并
结构体类型变量作为函数参数只能作为指针传递吗?为什么我写一个函数参数是结构体,下面引用时报错 typedef struct { char name[10]; char sex; long num; }ElemType;//自定义元素类型。 typedef struct{ ElemType *elem;//存储空间基址。 int length;//当前长度。 int listsize;//当前分配的存储容量(以sizeof(ElemType)为单位)。 }SqList;//定义顺序线性表类型 void MergeList_Sq(SqList La,SqList Lb,SqList *Lc){ ElemType *pa,*pb,*pc; pa=La->elem;pb=Lb->elem; }
顺序存储结构,线性表,单链表
用顺序存储结构实现线性表时,在线性表中查找等于x的元素,人们通常先在线性表尾部临时增加一个等于x的元素,这样做可以加快查找速度,为什么?用单链表实现线性表时,这样做也可以加快查找速度嘛?为什么?
求救帮忙看一下我这个用C语言写的顺序线性表线性表合并为什么会有warning C4020: ?一直找不到原因
调试环境VC6.0 ``` #include<stdlib.h> #include<stdio.h> typedef int Status; // Status 是函数返回值类型,其值是函数结果状态代码。 #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define List_Init_Size 100 //线性表存储空间初始分配量 #define Listincerment 10 //线性表存储空间的分配增量 typedef struct SqList { int *elem; int length; int listsize; //当前分配的存储容量() }SqList; Status InitList_Sq(SqList*L) {//初始化顺序线性表// L->elem=(int*)malloc(List_Init_Size*sizeof(int)); if(!L->elem)exit(OVERFLOW); //存储分配失败 L->length=0; return OK; } Status GetElem(SqList a,int i,int*e) { //读取元素 if(i<0||i>a.length) return ERROR; e=&a.elem[i-1]; //i-1存储第i个元素 return OK; } int ListLength(SqList L) { //计算长度 if(!L.elem)exit(ERROR); return L.length; } Status ListInsert_Sq(SqList *L, int i, int e) { //i位置之前插入新元素e if(i<1||i>L->length+1)return ERROR; if((L->length)>=(L->listsize)){ //当前存储空间已满,增加分配 int*newbase,*q,*p; newbase=(int*)realloc(L->elem,(L->listsize+Listincerment)*sizeof(int)); if(!newbase)exit(OVERFLOW);//存储分配失败} L->elem=newbase; //新的基址 L->listsize+=Listincerment; //增加容器容量 q=&(L->elem[i-1]); //q为插入位置 for(p=&(L->elem[L->length-1]);p>=q;--p) *(p+1)=*p; //插入位置及以后的元素后移 *q=e; //插入e ++L->length; } return OK;} void MergeList(SqList La,SqList Lb,SqList*Lc) { //线性表La和Lb中的数据元素按照值非递减排列。 int i,j,k,ai,bj; InitList_Sq(Lc); i=j=1;k=0; La.length=ListLength(La); Lb.length=ListLength(Lb); while((i<=La.length)&&(j<=Lb.length)) { GetElem(La,i,&ai); GetElem(Lb,j,&bj); if(ai<=bj) { ListInsert_Sq(Lc,++k,ai); ++i;} else{ListInsert_Sq(Lc,++k,bj);++j;} } while(i<=La.length) { GetElem(La,i,&ai); i++; ++k; InitList_Sq(Lc,k,&ai);} while(j<=Lb.length) { GetElem(Lb,j,&bj);j++; ++k; InitList_Sq(Lc,k,&bj); } } void output(SqList L) { int i; for(i=0;i<L.length;i++) { printf("%d ",L.elem[i]); } } void main() { SqList a,b,c; int i,j,k; InitList_Sq(&a); InitList_Sq(&b); printf("输入要写入链表a中元素的个数"); scanf("%d",&j); printf("输入每个元素"); for(i=1;i<=j;i++) { int e; scanf("%d",&e); ListInsert_Sq(&a,i,e); } printf("输入要写入链表b中元素的个数\n"); scanf("%d",&k); printf("输入每个元素"); for(j=1;j<=k;i++) { int e; scanf("%d",&e); ListInsert_Sq(&b,i,e); } MergeList(a,b,&c); output(c); } ``` ![图片说明](https://img-ask.csdn.net/upload/201912/02/1575268330_217932.png)
线性表在顺序存储结构上的插入和删除
要求: (1)建立顺序线性表:在长度为Listsize的顺序表上存储1,3,5, 7 , 9组成的递增序列: (2)将一个指定数据(8)插入到有序序列中,使之仍然有序; insert( )(3)将有序序列中的5删除。Delete()
这是一个关于数据结构线性表的问题
``` #include<iostream> using namespace std; #define OK 1 #define MAXSIZE 10000 #define OVERFLOW -1 int main() { typedef struct { char no[20]; char name[50]; float price; }Book; typedef struct { Book *elem; int length; }SqList; SqList L; return 0; } int a(SqList L) { return OK; } ``` 上面是我写的代码,编译后 --------------------Configuration: 线性表 - Win32 Debug-------------------- Compiling... 线性表.cpp E:\数据结构\线性表.cpp(24) : warning C4101: 'L' : unreferenced local variable E:\数据结构\线性表.cpp(28) : error C2065: 'SqList' : undeclared identifier E:\数据结构\线性表.cpp(28) : error C2146: syntax error : missing ')' before identifier 'L' E:\数据结构\线性表.cpp(28) : error C2059: syntax error : ')' E:\数据结构\线性表.cpp(29) : error C2143: syntax error : missing ';' before '{' E:\数据结构\线性表.cpp(29) : error C2447: missing function header (old-style formal list?) Error executing cl.exe. 线性表.exe - 5 error(s), 1 warning(s) 显示上述错误,为什么呢?
用Java语言表示数据结构中的线性表
以线性表表示集合,判断指定元素是否属于集合,实现并、交、差等集合运算(要求:用Java语言实现)
关于数据结构(c语言版)线性表的问题
写完线性表实验代码后,有些错误 不会调试 求大神帮帮忙! ps.错误截图:[图片说明](https://img-ask.csdn.net/upload/201509/26/1443267795_67072.png) 代码: #include<stdio.h> #include<stdlib.h> #include<malloc.h> #define LIST_INIT_SIZE 100 //线性表存储空间的初始分量 #define LISTINCREMENT 10 //线性表存储空间的分配增量 typedef struct{ ElemType* elem; //存储空间基址 int length; //当前长度 int listsize; //当前分配的存储容量 }SqList; Status InitList(SqList &L){ L.elem=(ElemType *)malloc(LIST_INIT_SIZE * sizeof(ELemType)); if(! L.elem) exit(OVERFLOW); L.length =0; L.listsize=LIST_INIT_SIZE; return OK; }//初始化空线性表 Status ListInsert(SqList &L,int i,ElemType e){ if(i<1||i>L.length+1)return ERROR; if(L.length>=L.listsize){ newbase=(ElemType *)realloc(L.elem,(L,listsize+LISTINCREMENT)*sizeof(ElemType)); if(!newbas)exit(OVERFLOW); L.elem=newbase; L.listsize+=LISTINCREMENT; } q=&(L.elem[i-1]); for(p=&(L.elem[L.length-1];p>=q;--p)*(p+1)=*p; *q=e; ++l.length; return OK; }//插入元素 Status ListDelete(SqList &L,int i,ElemType &e){ if((i<1)||(i>L.length)) return ERROR; p=&(L.elem[i-1]); e=*p; q=L.elem+L.length-1; for(++p;p<=q;++p)*(p-1)=*p; --L.length; return OK; } Status DestroyList(SqList &l) { free(&L); return OK; }//销毁 Status ClearList(SqList &L){ L.length=0; return OK; }//重置 bool ListEmpty(Sqlist L){ if(L.length==0) { return true; } else{ return false; } }//判断是否是空表,若是空输出true 否则输出false int ListLength(SqList L){ return L.length; } Status GetElem(SqList L,int i,ElemType &e){ if(i<1||i>=L.lenth) return ERROR; e=L.elem[i-1]; return OK; }//用e返回L中第i个值 int LocateElem(SqList L,ElemType e,bool (*equal)(ElemType,ElemType)){ int i=1; ElemType*p=L.elem; while(i<=length && !(*equal)(*p++,e)) ++i; if(i<=L.length) return i; else return 0; } Status PriorElem(SqList L,ElemType cur_e,ElemType &pre_e){ int i=1; while(i<=L.length && !(cur_e==L.elem[i-1])) ++i; if(i<2 ||i>L.length){ return ERROR; } pre_e =L.elem[i-2]; return OK; }//返回前驱 Status NextElem(SqList L,ElemType cur_e,ElemType &next_e){ int i=1; while(i<=L.length && !(cur_e==L.elem[i-1])) ++i; if(i<2||i>L.length) return ERROR; next_e=L.elem[i]; return OK; }//后继 Status ListInsert(Sqlist &L,int i,ElemType e){ if(i<1||i>L.length+1) return ERROR; if(L.length>=L.listsize){ ElemType *newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType)); if(!newbase)exit(OVERFLOW); L.elem=newbase; L.listsize+=LISTINCREMENT; } ElemType *q=&(L.elem[i-1]); ElemType *p; for(p=&(L.elem[L.length-1]);p>=q;--p;) *(P+1)=*p; *q=e; ++L.length; return OK; } Status ListTraverse(SqList L,bool(*visit)(ElemType)){ int i=1; ElemType *p=L.elem; while(i<=L.length && (*visit)(*p++)) ++i; return OK; }//遍历 int main() { printf("1---初始化一个列表\n"); printf("2---显示线性表\n"); printf("3---获取线性列表指定位置的元素\n"); printf("4---求线性表长度\n"); printf("5---求前驱\n"); printf("6---求后继\n"); printf("7---在线型表指定位置插入元素\n"); printf("8---删除指定位置元素\n"); printf("9---清空线性列表\n"); printf("10---判断线性列表是否为空\n"); printf("11---销毁线性列表\n"); printf("12---合并两个非递减数列"); printf(" 退出---输入负数:\n"); Sqlist L; ElemType e; ElemType pre_e; ElemType next_e; for(int i=0;i<20;i++) { e=i+1; ListInsert(L,i+1,e); } int j,k; printf("输入想要的操作 "); scanf("%d",&j); switch(j){ case 1:InitList(L); if(ListEmpty(L)) { printf("空"); } break; case 2:ListTraverse(L,visit); break; case 3: printf("输入想要的元素"); scanf("%d",&k); if(k<0 || k>20) { printf("输入错误"); } else{ GetElem(L,k,equal); } break; case 4: printf("线性表长度是:",ListLength(L)); break; case 5: pirntf("输入求第几个数的前驱"); scanf("%d",&k); PriorElem(L,k,pre_k); printf("前驱是:%d\n",pre_k); break; case 6: pirntf("输入求第几个数的后继"); scanf("%d",&k); NextElem(L,k,next_k); printf(后继是:%d\n",next_k); break; case 7: printf("在第几个位置插入元素?"); scanf("%d",&k); printf("插入的数字是:"); int x; scanf("%d",&x); ListInsert(L,k,x); break; case 8: printf("输入要删除的元素的位置"); scanf("%d",&k); ListDelete(L,k,e); printf("所删除的元素是:%d",e); ListTraver(L,visit); break; case 9: ClearList(L); printf("线性表已清空\n"); printf("线性表长度:%d\n",ListLength(L)); break; case 10: if(ListEmpty(L)) { printf("kong\n") } break; case 11: DestroyList(L); break; } }
数据结构,线性表的合并函数Merge(*SA,*SB),SC来存储,该怎么写?
实现两个线性表的合并,的Merge(*SA,*SB)函数体如何写?SC用来存储合并后的表。求大神们解答,谢谢!
c语言版 合并顺序线性表
已知两个非递减线性表la和la,把它们合并到线性表lc中,要求lc表也是非递减的,并且不能有重复的元素,求大神帮助
顺序表、链表和数组是逻辑结构还是物理(存储)结构?或者这两种结构都有描述?
数据结构中的线性结构也就是“线性表”是逻辑结构,现在可以肯定栈与队列都是存储结构,栈与队列都是线性表,顺序表和链表也是线性表,一维数组和顺序表又基本上是一回事,那么顺序表和链表也是存储结构吗? 主要是在网上看了很多人的回答,各种说法都有,所以想确认一下。
关于数据结构顺序表的应用
设计一个通讯录,用顺序存储结构进行存储,设计出生成线性表,在第I个结点位置插入结点,删除第I个结点,打印表中结点的算法
数据结构中的线性表中的指针使用
数据结构 单链表 类型定义: typedef struct lnode { elemtype data; struct lnode *next; }Lnode, *LinkList; int InitList(LinkList *L)//构造一个空的线性表L { 构造一个空的线性表L *L=(LinkList)malloc(sizeof(struct LNode)); if(!*L) /* 存储分配失败 */ exit(OVERFLOW); (*L)->next=NULL; /* 指针域为空 */ return OK; } int ListInsert(LinkList L,int i,ElemType e) //在带头结点的单链线性表L中第i个位置之前插入元素e { int j=0; LinkList p=L,s; while(p&&j<i-1) /* 寻找第i-1个结点 */ { p=p->next; j++; } if(!p||j>i-1) /* i小于1或者大于表长 */ return ERROR; s=(LinkList)malloc(sizeof(struct LNode)); /* 生成新结点 */ s->data=e; /* 插入L中 */ s->next=p->next; p->next=s; return OK; } void main() { LinkList L; ElemType e; int i; int j; i=InitList(&L); for(j=1;j<=10;j++) ListInsert(L,j,j); } 在类型定义中linklist已经是指向节点的指针了,为什么在构造一个空的线性表L的函数int InitList(LinkList *L) 中形参为LinkList *L(即L为指向指针的指针),而不是LinkList L????linklist作为一个指针也可以操作链表的呀!!! 在链表插入函数int ListInsert(LinkList L,int i,ElemType e)中,形参为什么却变成了LinkList L??? 在main函数中定义的是指针变量LinkList L; 为何不定义成Lnode L???? 什么时候该用LinkList *L,什么时候该用LinkList L,什么时候该用Lnode L?????它们的区别是什么????望大神详细回答,感激万分!!!
线性链表数据结构的插入与删除
在你自己的文件下,建立一个C语言程序SL.C,完成下列要求: 1、 定义长度为10的数组,输入9个数据(1,3,4,5,7,9,12,20,28),然后输出这九个数组元素的存储单元地址和相应的数值; 2、 建立一个数组元素的插入函数,能够按照数据从小到大的次序自动找到插入位置完成插入元素的操作,调用此函数插入数据15,然后输出数值元素的存储单元地址和相应的数值; 3、 建立一个数组元素的删除函数,能够按照数据自动删除指定元素的操作,调用此函数删除数据值为9的数组元素,然后输出数组元素的存储单元地址和相应的数值。 在你自己的文件下,建立一个C语言程序LL.C,完成下列要求: 4、 定义一个单链表LLIST,按数据1,3,4,5,7,9,12,20,28的次序建立各结点,形成单链表LLIST,然后按链表顺序输出九个结点的存储单元地址和相应的数值; 5、 建立一个插入函数,将数据15作为结点按照从小到大的次序自动插入到链表的相应位置上,完成插入结点的操作,形成新的链表LLIST,然后输出链表结点的存储单元地址和相应的数值; 6、 建立一个删除函数,将链表中第七个结点删除,形成新的链表LLIST,然后输出链表结点的存储单元地址和相应的数值;
SqList结构体中的length是怎么改变线性表的长度的?求大神解答
//线性表的动态分配顺序存储结构。 struct SqList { ElemType * elem; //线性表存储空间的初始分配量; int length; // 线性表的长度; int listsize; // 当前分配的存储容量; }; struct SqList L; 为什么在 L.length = 0 的时候就代表线性表长度为零?它是如何实现的? 当 L.length = 0 时,难道不应该是结构体L中的length这一变量变为0吗?
求大佬注释c语言数据结构线性表
求大佬帮忙注释一下,初学小白,什么都看不懂 ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #define OK 1 #define ERROR -1 #define MaxSize 100 typedef int status; typedef struct stu{ char name[20]; int age; int no; }Stu; typedef struct sqlist{ Stu *Elem; int length; }Sqlist; status Init_List(Sqlist *L) { L->Elem=(Stu *)malloc(MaxSize*sizeof(Stu)); if(!L->Elem) { printf("Allocation Error!\n"); return ERROR; } L->length=0; return OK; } status Insert_List(Sqlist *L,int pos,Stu *s) { int k; if(pos<1 || pos>L->length+1) return ERROR; for(k=L->length-1;k>=pos-1;k--) L->Elem[k+1]=L->Elem[k]; printf("Input information of the new student (name age number):\n"); scanf("%s %d %d",s->name,&s->age,&s->no); L->Elem[pos-1]=*s; L->length++; return OK; } status Del_List(Sqlist *L,char *name) { int i; if(L->length==0) return ERROR; for(i=0;i<L->length;i++) if(strcmp(name,L->Elem[i].name)==0) break; if(i==L->length) { printf("Can not find %s.\n",name); return ERROR; } while(i<L->length-1) { L->Elem[i]=L->Elem[i+1]; i++; } L->length--; return OK; } void Output(Sqlist *L) { int i; printf("The elements in the list:\n"); for(i=0;i<L->length;i++) printf("student %d: %20s %3d %8d\n",i+1,L->Elem[i].name,L->Elem[i].age,\ L->Elem[i].no); printf("\n"); } int main() { Sqlist L; Stu s; int i,n; char name[20]; Init_List(&L); printf("Input the number of the students.\n"); scanf("%d",&n); for(i=1;i<=n;i++) Insert_List(&L,i,&s); Output(&L); printf("Input the position of the new student.\n"); scanf("%d",&n); Insert_List(&L,n,&s); Output(&L); printf("Input the name of the student to be deleted.\n"); scanf("%s",name); Del_List(&L,name); Output(&L); return OK; } ```
数据结构顺序表合并中指针怎么用才能运行?
已知线性表LA和LB中的数据元素按值非递减有序,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列.![图片说明](https://img-ask.csdn.net/upload/201604/20/1461156703_331210.png) 怎么改呢? 初学,数据结构小白![图片说明](https://img-ask.csdn.net/upload/201604/20/1461156776_917564.png) 额。。,用的顺序表
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
《阿里巴巴开发手册》读书笔记-编程规约
Java编程规约命名风格 命名风格 类名使用UpperCamelCase风格 方法名,参数名,成员变量,局部变量都统一使用lowerCamelcase风格 常量命名全部大写,单词间用下划线隔开, 力求语义表达完整清楚,不要嫌名字长 ...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。 2.解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
Python绘图,圣诞树,花,爱心 | Turtle篇
1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle() circle.shape('circle') circle.color('red') circle.speed('fastest') circle.up() square = turtle.Turtle()
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
Linux 命令(122)—— watch 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] watch(1) manual
Linux 命令(121)—— cal 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] cal(1) manual
记jsp+servlet+jdbc实现的新闻管理系统
1.工具:eclipse+SQLyog 2.介绍:实现的内容就是显示新闻的基本信息,然后一个增删改查的操作。 3.数据库表设计 列名 中文名称 数据类型 长度 非空 newsId 文章ID int 11 √ newsTitle 文章标题 varchar 20 √ newsContent 文章内容 text newsStatus 是否审核 varchar 10 news...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告(本文) 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧...... 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升
相关热词 c#导入fbx c#中屏蔽键盘某个键 c#正态概率密度 c#和数据库登陆界面设计 c# 高斯消去法 c# codedom c#读取cad文件文本 c# 控制全局鼠标移动 c# temp 目录 bytes初始化 c#
立即提问