C++链表头指针位置不知为什么出错 5C

希望实现第一行输入n和m,后面共输入n+m行
后面有n行由四个数字组成,第一个为1,表示创建新的结点,第二个为此
结点的数据域,第三个为某个结点的数据域(如果为-1则表示此为第一个
创建的结点),第四个为0或者1,若为0表示新结点
建立在第三个数字代表的结点的左边,若为1则表示在右边。
后面有m行由2个数字组成,第一个为0,表示删除结点,第二个为需要删除
的结点的数据域。
最终把最后的链表打印出来,并在末尾加-1表示输出结束。

代码如下:

#include
#include
using namespace std;
typedef struct node //同学结点
{
int data; //同学编号
struct node *next; //结点指针,指向下一个
}NODE;

class list
{
private:
NODE *head;
int length;
public:
list(){head=NULL;length=0;}
~list(){}
int find(int i)
{
NODE *p=head;
int j=1; //元素地址,第一位标记为第1位
while(p&&p->data!=i&&p&&p!=NULL)
{
p=p->next;
j++;
}
if(p==NULL)return 0; //未找到返回0
return j;
}
int Insert(int i,int x,int k)
{
NODE *p=head, *s;
int j=0;
int location=find(x);
if(location==0)
{
s=(NODE *)new NODE[1];
s->data=i;
s->next=p;
head=s;
length++;
return 1;
}
if(k==0) //插入左边
{
while(p&&jnext;j++;}
if(!p)return 0;
s=(NODE *)new NODE[1];
s->data=i;
s->next=p->next;
p->next=s;
length++;
return 1;
}
else if(k==1) //插入右边???
{
while(p&&jnext;j++;}
if(!p)return 0;
s=(NODE *)new NODE[1];
s->data=i;
s->next=p->next;
p->next=s;
length++;
return 1;
}
return 0;
}
int Delete(int i)
{
NODE *p=head,*q;
int j=0;
int location=find(i);
if(!p)return 0;
if(location==1)
{
head=head->next;
delete p;
p=NULL;
length--;
return 1;
}
while(p->next&&jnext;j++;}
if(!(p->next)||j>i-1)return 0;
q=p->next;
p->next=q->next;
delete q;
q=NULL;
length--;
return 1;
}
void setlength(int n,int m)
{
length=n-m;
}
void print() //打印函数
{
NODE *p=head;
for(int i=0;i {
coutdata<<' ';
p=p->next;
}
}
};
int main()
{
list student;
int m,n,a1,a2,a3,a4,a5;
scanf("%d",&n);
scanf("%d",&m);
student.setlength(n,m);
for(int i=0;i<n+m;i++)
{
scanf("%d",&a1);
if(a1==1)
{
scanf("%d",&a2);
scanf("%d",&a3);
scanf("%d",&a4);
student.Insert(a2,a3,a4);
}
if(a1==0)
{
scanf("%d",&a5);
student.Delete(a5);
}
}
student.print();
cout<<-1;
return 0;
}

结果指针的顺序倒是没问题,但是打印出来的结果
经常不是从头开始打印,请问这是为什么?

c++

2个回答

for(int i=0;i {
这里代码乱套了。没办法帮你调试

而且很奇怪,你都是普通函数,不是成员函数,那么head哪里来的。

首先从左侧右侧插入是啥意思?我猜你只是想要创建一个链表,用头插法或者尾插法啊。主要你这个插入函数问题很大啊,参数就很怪,
插入位置不给吗,那要location()函数干嘛?
回到你这个代码中,首先你这个直接通过插入函数创建的话,看你代码先是执行从右边插入(头插法),这部分代码应该是对的,所以这时候创建了一个带
头结点的链表,还输入了3个值,链表中顺序是a4,a3,a2;然后又从左侧插入(尾插法),但很明显,你这个代码居然跟从右侧插入一样,所以跟之前一样,
现在链表中顺序是a5,a4,a3,a2;最终输出也应该是这个顺序,至于你说的不按顺序输出是什么意思我就不太明白了。你需要搞清楚创建链表函数和插入函数的区别,画个图分析下吧,慢慢理解,哈哈。

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

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

关于链表打印问题,链表头与表头指针所指向的节点。

typedef struct Node { int data; struct Node *next; }SLIST; SLIST *Creat_SList(); int SList_Print(SLIST *pHead); //在结点数值为x的前面插入y int SList_NodeInsert(SLIST *pHead, int x, int y); //删除结点为y的链表结点 int SList_NodeDel(SLIST *pHead, int y); int SList_Destory(SLIST *pHead); SLIST *Creat_SList() { //1 创建头结点并初始化 int data = 0; SLIST *pHead = NULL, *pM = NULL, *pCur = NULL; pHead = (SLIST *)malloc(sizeof(SLIST)); pHead->data = 0; pHead->next = NULL; //2循环创建结点,结点数据域中的数值从键盘输入, //以-1作为输入结束标志 printf("\nPlease enter the data of node(-1:quit) "); scanf("%d", &data); //准备环境 让pCur指向pHead pCur = pHead; while(data != -1) { //malloc新节点 并且数据域 赋值 pM = (SLIST *)malloc(sizeof(SLIST)); pM->data = data; pM->next = NULL; //1新节点入链表 pCur->next = pM; //2 当前结点下移(新结点变成当前结点) pCur = pM; // (pCur = pCur->next) //回想创建的内存模型你立刻就知道了。 printf("\nPlease enter the data of node(-1:quit) "); scanf("%d", &data); } return pHead; } 上面是创建链表代码,下面是打印链表代码。 int SList_Print(SLIST *pHead) { SLIST *p = NULL; if (pHead == NULL) { return -1; } //准备环境 p = pHead->next; printf("\nBegin "); while(p) { printf("%d ", p->data); p = p->next; } printf("End "); return 0; } 创建链表中,头结点也记录了用户输入,打印链表的代码,我看应该不打印头结点数据,应该从第二个节点开始打印,为什么这打印代码也从头结点开始打印了? 麻烦各位看一下。

【C语言-链表】请问怎么判断链表已经被销毁?

【问题描述】学习链表,销毁链表总感觉没有成功,请问怎么确定链表确实被销毁了?为什么其余节点的内容没有变化? 【代码】 ``` #include<stdio.h> #include<stdlib.h> #include<string.h> struct link_list { int num; char name[20]; struct link_list *next; }; typedef struct link_list ls; int icount = 0; /*链表长度*/ /*链表创建函数*/ ls* create() { ls *phead = NULL; ls *pend, *pnew; char flag; /******************************************************************* 链表循环赋值 *******************************************************************/ while(1) { pnew = (ls*)malloc(sizeof(struct link_list));/*分配空间*/ if(pnew == NULL) /*检测内存分配情况*/ { printf("内存分配失败\n"); return NULL; } if(0 == icount)/*如果是第一个节点*/ { icount++; pnew->next = NULL;/*尾指针指向空*/ phead = pnew;/*头指针指向头节点*/ pend = pnew;/*保存当前指针*/ printf("phead=%d\n", phead); printf("输入姓名:\n"); scanf("%s", pnew->name); printf("输入学号:\n"); scanf("%d", &pnew->num); printf("是否结束输入?y结束,n继续\n"); getchar(); flag = getchar(); if(flag == 'y') { return phead; } } else { icount++; pend->next = pnew; pend = pnew; pnew->next = NULL; printf("输入姓名:\n"); scanf("%s", pnew->name); printf("输入学号:\n"); scanf("%d", &pnew->num); printf("是否结束输入?y结束,n继续"); getchar(); flag = getchar(); if(flag == 'y') { return phead; } } } } /*遍历输出*/ void print(ls* phead) { ls* ptemp; ptemp = phead; while(NULL != ptemp) { printf("\n\n学号:%d\n姓名:%s\n", ptemp->num, ptemp->name); ptemp = ptemp->next; } } /*销毁*/ void damage(ls* phead) { ls *ptemp1; do { printf("删除前节点内容%d 地址phead=%d\n", phead->num, phead); ptemp1 = phead->next; /*保存当前销毁节点指向的地址*/ printf("被销毁节点指向的地址ptemp1=%d\n", ptemp1); free(phead); /*释放当前指针指向的节点空间*/ printf("释放后节点内容%d\n", phead->num); printf("释放后phead=%d\n", phead); phead = ptemp1; /*获取下一个节点地址*/ printf("重新赋值phead=%d\n\n", phead); }while(ptemp1 != NULL); } int main(void) { ls* phead = NULL; int lcat, lcat_del; phead = create(); printf("主函数头指针地址%d\n", phead); print(phead); damage(phead); return 0; } ``` 【运行结果】 ![图片说明](https://img-ask.csdn.net/upload/201912/21/1576889257_479546.png) ![图片说明](https://img-ask.csdn.net/upload/201912/21/1576889268_527655.png)

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

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

使用void函数传入链表头节点并删去头节点无效

先贴出问题代码: https://paste.ubuntu.com/p/MnGxQmfXj8/(add节点函数还没写好,先忽略,哈哈) ![图片说明](https://img-ask.csdn.net/upload/201912/17/1576569225_769246.png) 之后我尝试用返回值为指针型的函数就可以删去头节点,不知道为什么,也贴出代码: https://paste.ubuntu.com/p/kSMQkcBw6h/

关于创建链表的一个小问题。

我正在学习链表,下图是一个结构体,然后有一个结构体指针。我知道链表有一个表头,指向数据,然后有指针指向下一数据。 我就是不明白为什么在一个结构体指针函数头里面写链表,这和指针函数头什么意思。 为什么SLIST *Creat_Slist()(一个结构体指针函数头)创建一个链表?这个函数头什么意思? 我会在main里面创建静态链表(这和链表在main函数头里面)并且这个静态链表能够运行。 我正在学,原谅我知识浅薄,请帮帮我。![图片](https://img-ask.csdn.net/upload/201602/17/1455696857_912191.png)

c语言指针变量赋值左值右值得问题

c和指针一书提到了 左值与右值 , 左值是地址 右值是变量内容,如下的代码 第三行与第四行 中, 第三行 *cp 左值代表的是指针cp 指向的地址 ,赋值ch变量对应的地址,但是第四行同样是*cp作为左值 ,但是 为什么这里如果赋值&ch2就会编译错误呢,为什么*cp 同样作为左值,赋值给字符的地址,第三行通过,第四行 就会报错呢? 再加一句啊,*cp是指针指向的内容那个,所以需要用变量的内容来赋值,这个我也是一直这么来理解的,没问题,我更想知道的是书中所说的左右值问题,左值都是代表地址, 右值代表的是变量的值,而且c和指针一书说到*cp时也是说 作为左值时代表的是指向内容的地址,而作为右值时,代表的是指向的内容,是否可以理解为这句话只是在声明指针变量时有效? 如果在后面使用的时候 无论*cp 作为左值还是右值代表的都是指向的内容? char ch='a'; char ch2='b'; char *cp=&ch; *cp=ch2;

为什么python中的列表可以用append增加元素 列表的内存是像数组一样物理连续还是靠指针像链表一样分配

如题 为什么python中的列表可以用append增加元素 列表的内存是像数组一样物理连续还是靠指针像链表一样分配。想知道这个函数是用什么封装起来的 谢谢啦

关于二叉树创建时结构体指针的用法

# 关于二叉树创建时结构体指针的用法 在创建二叉树时我们常常这样用typedef声明一个结点类型和一个二叉树链表: ![图片说明](https://img-ask.csdn.net/upload/201412/30/1419943855_447586.png) typedef struct BiNode{ //二叉链表定义 char data; struct BiNode *lchild,*rchild; }BiTNode,*BiTree; 这里用typedef声明了一个结点类型BiTNode,BiTree在这里是一个结构体指针。 在创建一个二叉树时我们常常这样定义一个创建函数: ![图片说明](https://img-ask.csdn.net/upload/201412/30/1419944007_698564.png) 在这个创建二叉树函数中传入的参数为BiTree &T,也就是说要传入一个结构体指针的指针给函数CreateBiTree,我的问题来了,既然BiTree已经是一个指针类型了,为什么不直接传入BiTree T这样一个一重指针啊,为什么要传入一个指针的指针啊?我知道在软件开发中有时为了避免值传递造成的影响常常向函数传递一个指针就行了,但不明白这里为什么要传递一个二重指针啊?因为BiTree是一个指针类型的修饰符……

在学习线性链表类型定义的时候,发现只有结构体的定义,没有里面的内容。同时发现在C#中的命名空间中函数也是只有声明没有内容,不知道系统如何实现操作?

如下面代码片段实现结果: ~~~ //带头结点的线性链表类型定义: typedef struct LNode { ElemType date; struct LNode *next; }*Link,*Position; typedef struct{ Link head,tail; int len; }LinkList; //下面就是实现方法,但是没有实现步骤。 Status MakeNode(Link &p,ElemType e); void FreeNode(Link &p); Status InitLIst(LinkList &L); //还有部分实现方法就不一一例举了 ~~~ 然后再查看C#中的Console的内部函数时候,发现也是这样: ~~~ public static bool IsInputRedirected { get; } public static int BufferHeight { get; set; } public static int BufferWidth { get; set; } public static bool CapsLock { get; } //以上例举的是构造函数,而实现其他方法的函数与这个结构类似,只有函数定义和内部参数,没有实现函数的过程。 ~~~ 此处列举了4个构造函数,这些函数都是只有定义没有内容,没有实现方法,不知道他们是如何让计算机执行操作的,例如:Console.WriteLine("Hello,World!")这样最简单的程序。计算机是如何调用WriteLine()函数的?没有实现方法,如何输出里面的字符?

一个c语言单向链表,编译通过,运行结果却不知所谓,请求帮助

这段代码在rhel6中用gcc编译通过,运行结果未定义,其中作的链表按number大小排序打印出来是没有排过序的结果,而且输入记录多了,其中某些项的number打印出来会由输入的值变成0或者一个莫名其妙的整数. vs2008中编译通过,打入多项记录只能显示2条,而且前一条是乱码. 最简单的一个数据结构,却忙了半天还查不出原因,帮个忙吧-_-||| **原代码:** /*简单单向链表,输入学生名称和号码,按号码排序, * 如果号码相同则记录合并为一条,附输出函数*/ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<ctype.h> #define N 50 #define LEN (sizeof(student *)) static int n=0;//计数器 typedef struct student{ char name[N]; int number; struct student *next;}student;//链表节点结构 int main() { student *add(student *head);//添加记录函数声明 void list(student *head);//列表函数声明 student *head=NULL; while(1){ printf("'N/n' to add,'L/l' to list,other to exit:"); char ch=toupper(getchar()); getchar(); if(ch=='N')head=add(head); else if(ch=='L')list(head); else break;} return 0; }//主函数 student *add(student *head){ student *p,*p1=head,*p2=head; p=(student *)malloc(LEN);//分配一片空间 printf("Input name:"); gets(p->name); printf("Input number:"); scanf("%d",&p->number); scanf("%*[^\n]"); scanf("%*c"); if(p->number<=0){//如果输入号码<=0,直接返回 printf("Wrong number!!\n"); return head;} else{ if(head==NULL){//如果表空直接接到头指针 head=p; head->next=NULL; n++;} else{//表不空 //确定p1指向 while(p->number>p1->number&&p1->next!=NULL){ p2=p1;//p2保存p1指向下一节点之前的值 p1=p1->next;} if(p->number<p1->number){//插入表中的情况 p2->next=p; p->next=p1; n++} //如果号相等,合并记录 else if(p->number==p1->number)strcpy(p1->name,p->name); else if(p1->next==NULL){//输入新记录的号码比链表里所有都大的情况 p1->next=p; p->next=NULL; n++;} } } return head;} void list(student *head){//遍历打印函数 student *p=head; printf("There's %d records!!\n",n); printf("Name:\t\tNumber:\n"); while(p){ printf("%s\t\t%d\n",p->name,p->number); p=p->next;} }

复杂链表删除其中一个节点,我的程序在删除random的时候出问题了,不知道哪里的问题

代码在此https://paste.ubuntu.com/p/PxHvzzWBXD/ 输入样例 5 2 2 0 3 1 6 9 15 2 4 -1 1 -1 2 3 1 0 2 10 3 -1 输出样例 1 3 1 10 9 -1 1 1 -1

OC链表问题不知道我理解的是否正确

//学生结构体 typedef struct student{ unsigned int num;//学号 char name[20]; //姓名 char gender; //性别 unsigned short age;//年龄 float score; //成绩 }Student; //节点结构体 typedef struct studentNode{ Student student; //数据域 struct studentNode *next;//指针域 }StudentNode; //初始化链表 void initLinkedList(StudentNode **pHeader){ *pHeader = NULL; printf("链表初始化成功\n"); } //创建节点 StudentNode *createNode(){ StudentNode *stuNode = calloc(1, sizeof(StudentNode)); if (NULL == stuNode) { printf("内存分配失败\n"); exit(1);} stuNode ->next = NULL; //editNodeInfo(stuNode); return stuNode; } 这段代码是C语言链表的创建,那么我想请问下如果是OC这段代码应该如何实现。。。。

c语言 free() 需要释放分配结构里面分配的结构内存么-贪吃蛇-链表

![结构如下](https://img-ask.csdn.net/upload/201907/09/1562648615_804996.png) ![这样分配了内存](https://img-ask.csdn.net/upload/201907/09/1562648663_621565.png) ![释放链表](https://img-ask.csdn.net/upload/201907/09/1562648697_654819.png) 这需要释放node中 position 分配的内存么(注释地方); 我 如果释放position 就会报错 有大佬知道么 更新;-> 出链表的时候释放没报错 ![图片说明](https://img-ask.csdn.net/upload/201907/10/1562739918_882454.png) ------ ![图片说明](https://img-ask.csdn.net/upload/201907/10/1562739943_97624.png) ------- 当最后程序结束是清空释放 position 报错 ![图片说明](https://img-ask.csdn.net/upload/201907/10/1562740020_898931.png) -------- ![图片说明](https://img-ask.csdn.net/upload/201907/10/1562740040_80161.png) ---------- ![图片说明](https://img-ask.csdn.net/upload/201907/10/1562740062_890709.png) --------- ![图片说明](https://img-ask.csdn.net/upload/201907/10/1562740074_826811.png) 我认为position位置应该是有效的,程序其他地方也没去变动position地址 代码片段(代码主要是github大佬的代码,https://github.com/mnisjk/snake.git) ``` #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <curses.h> #include <sys/select.h> #include <time.h> #define SRC_WIDTH 70 #define SRC_HEIGHT 20 WINDOW *g_mainwin; int g_oldcur, g_score = 0, g_width, g_height; typedef struct { int x; int y; } pos; pos fruit; bool *spaces; // queue stuff struct s_node { pos *position; struct s_node *prev; struct s_node *next; } *front = NULL,*back =NULL; typedef struct s_node node; pos * peek(){ return front == NULL ? NULL : front->position; } node * dequeue(){ node *oldfront = front; front = front->next; return oldfront; } //queue a position at the back void enqueue(pos position) { pos *newpos = (pos *)malloc(sizeof(position)); node *newnode = (node *)malloc(sizeof(node)); newpos->x = position.x; newpos->y = position.y; newnode->position = newpos; if(front == NULL && back ==NULL) front = back = newnode; else { back->next = newnode; newnode->prev = back; back = newnode; } } //end queue stuff //start snake stuff void snake_write_text(int y,int x,char *str) { mvwaddstr(g_mainwin, y, x, str); } //draw the borders void snake_draw_board() { int i; for (i = 0; i < g_height;i++){ snake_write_text(i, 0, "|"); snake_write_text(i, g_width - 1, "|"); } for (i = 0; i < g_width;i++) { snake_write_text(0, i, "-"); snake_write_text(g_height, i, "-"); } snake_write_text(g_height + 1, 2, "Score:"); } //resets the terminal window and clears up the mem void snake_game_over(int i,pos p) { free(spaces); while (front) { node *n = front; front = front->next; free(n->position); free(n); } endwin(); printf("%d\n", i); printf("%d,%d\n",p.x,p.y); exit(0); } //当前位置是否在界限里面 bool snake_in_bounds(pos position) { return position.y < g_height && position.y > 0 && position.x < g_width - 1 && position.x > 0; } //2d坐标映射1d int snake_cooridinate_to_index(pos position) { return g_width * position.y + position.x; } //1d映射对应的坐标 pos snake_index_to_coordinate(int index) { int x = index % g_width; int y = index / g_width; return (pos){x, y}; } //随机出现水果 void snake_draw_fruit() { attrset(COLOR_PAIR(3)); int idx; do{ idx = rand() % (g_width * g_height); fruit = snake_index_to_coordinate(idx); } while (spaces[idx] || !snake_in_bounds(fruit)); attron(A_REVERSE); snake_write_text(fruit.y, fruit.x, " "); attroff(A_REVERSE); } //handles moving the snake for each iteration bool snake_move_player(pos head) { attrset(COLOR_PAIR(1)); //check if we ran into ourself int idx = snake_cooridinate_to_index(head); if(spaces[idx]){ pos te = {2, 2}; snake_game_over(2,te); } spaces[idx] = true; enqueue(head); //check if we're eating the fruit if(head.x == fruit.x && head.y == fruit.y) { snake_draw_fruit(); g_score += 10; }else{ node *tail = dequeue(); pos tem = *(tail->position); spaces[snake_cooridinate_to_index(tem)] = false; snake_write_text(tem.y, tem.x, " "); //if(tail->position != NULL) free(tail->position); free(tail); tail = NULL; } attron(A_REVERSE); snake_write_text(head.y, head.x, " "); attroff(A_REVERSE); char buffer[25]; sprintf(buffer, "%d", g_score); attrset(COLOR_PAIR(2)); snake_write_text(g_height+1,9,buffer); } void check_move_pos(pos *t_head,pos *head){ pos temp; node t_node = *back; if (&t_node == NULL) return ; else { if(t_node.prev != NULL){ if((t_node.prev)->position != NULL){ temp = *((t_node.prev)->position); if(t_head->x == head->x){ //x方向 if(temp.x == head->x && temp.y == head->y){ if(t_head->y > temp.y) head->y += 2; else head->y -= 2; } }else if(t_head->y == head->y) { //y方向 if(temp.x == head->x && temp.y == head->y){ if(t_head->x > temp.x) head->x += 2; else head->x -= 2; } } } } } } int main(int argc,char *argv[]) { int key = KEY_RIGHT; if((g_mainwin = initscr()) == NULL) { perror("error initialising ncursess"); exit(EXIT_FAILURE); } srand(time(NULL)); noecho(); curs_set(2); halfdelay(1); keypad(g_mainwin, TRUE); g_oldcur = curs_set(0); start_color( ); init_pair( 1, COLOR_RED, COLOR_BLACK ); init_pair( 2, COLOR_GREEN, COLOR_BLACK ); init_pair( 3, COLOR_YELLOW, COLOR_BLACK ); init_pair( 4, COLOR_BLUE, COLOR_BLACK ); init_pair( 5, COLOR_CYAN, COLOR_BLACK ); init_pair( 6, COLOR_MAGENTA, COLOR_BLACK ); init_pair( 7, COLOR_WHITE, COLOR_BLACK ); getmaxyx( g_mainwin, g_height, g_width ); g_width = g_width < SRC_WIDTH ? g_width : SRC_WIDTH; g_height = g_height < SRC_HEIGHT ? g_height : SRC_HEIGHT; // Set up the 2D array of all spaces spaces = (bool*) malloc( sizeof( bool ) * g_height * g_width ); snake_draw_board( ); snake_draw_fruit( ); pos head = { 5,5 }; enqueue( head ); // Event loop while( 1 ) { pos t_head = head; int in = getch(); if( in != ERR ) key = in; switch (key) { case KEY_DOWN: case 'k': case 'K': head.y++; break; case KEY_RIGHT: case 'l': case 'L': head.x++; break; case KEY_UP: case 'j': case 'J': head.y--; break; case KEY_LEFT: case 'h': case 'H': head.x--; break; } //禁止反向 check_move_pos(&t_head, &head); if (!snake_in_bounds(head)) snake_game_over(3, head); else snake_move_player(head); } pos te = {4, 4}; snake_game_over(4,te); } ``` 调试了 越来混乱了,一运行蛇啥不吃,链表里面应该只有一个地址才对,出链表也对应的释放了地址.可调试出现了最后出现了3个 ![图片说明](https://img-ask.csdn.net/upload/201907/10/1562744544_820667.png) 更新-> 搞好了, ![图片说明](https://img-ask.csdn.net/upload/201907/10/1562750107_36874.png) 新建节点 node *newnode = (node *)malloc(sizeof(node));时候,莫名 newnode 中 next 指针指向了未知 地址,按原本意思应该指向 0x0空地址 所有 newnode->next = newnode->prev = NULL; 初始化一下,不然结束的释放链表 就会找到这个 0x20 的地址 ![图片说明](https://img-ask.csdn.net/upload/201907/10/1562750298_228211.png) --- ![图片说明](https://img-ask.csdn.net/upload/201907/10/1562750311_263565.png) 一切正常了 ,高兴

数据结构 链表的创建 不知道怎么改

#include <stdio.h> #include <malloc.h> #include <stdlib.h> typedef struct Node //创建新的数据类型 { int data; //数据域 struct Node * pNext; //指针域 }NODE, *PNODE; //NODE等价与struct Node //PNODE等价于struct Node * //函数声明 PNODE create_list(); void traverse_list(NODE pHead); int main() { PNODE pHead = NULL; pHead = create_list(); //create_lsit()功能:创建一个非循环单链表,并将该链表的头结点的地址付给pHead traverse_list(pHead); return 0; } PNODE create_list() { int len; //用来存放有效节点的个数 int i; int val; //用来临时存放用户输入的结点的值 PNODE pHead = (PNODE)malloc(sizeof(NODE)); pHead->pNext = NULL; if (NULL == pHead) { printf("内存分配失败,程序终止!"); exit(-1); } printf("请输入您需要生成的链表节点个数:len = "); scanf("%d", &len); for (i=0; i<len; i++) { printf("请输入第%d个结点的数据:", i+1); scanf("%d", &val); PNODE pNew = (PNODE)malloc(sizeof(NODE)); if (NULL == pHead) { printf("内存分配失败,程序终止!"); exit(-1); } pNew->data = val; pNew->pNext = pHead->pNext; pHead->pNext = pNew; } return pHead; } void traverse_list(PNODE pHead) { PNODE p = pHead->pNext; while(p) { printf("%d ", p->data); p = p->pNext; } } -------------------------------------------------------------------------------------- G:\编程\数据结构\源代码\List.cpp(20) : error C2664: 'traverse_list' : cannot convert parameter 1 from 'struct Node *' to 'struct Node' --------------------------------------------------------------------------------------

最近碰到很多c的指针的问题,这个程序中的指针不知道哪里出问题了,希望大家能帮忙看下

#include "stdio.h" #include <stdlib.h> #include <iostream> struct custom { int id; int need; int allocation; int request; struct custom *next; }*L,*fir,*head;//结构体定义完毕 int input(int a,int b)//输入所有进程的所需资源数 { custom *p; head=(custom *)malloc(sizeof(custom)); int i; L=head; for(i=1;i<=a;i++)//建立单链表 { p=(custom *)malloc(sizeof(custom)); printf("请输入第%d个函数的进程标识数",i); scanf("%d",&p->id); printf("请输入第%d个进程的所需资源:",i); scanf("%d",&p->need); printf("请输入第%d个进程的初始资源:",i); scanf("%d",&p->allocation); p->need=(p->need)-(p->allocation); printf("当前进程还需资源数为%d\n",p->need); b=b-(p->allocation); printf("\n系统剩余资源数为:%d\n",b); L->next=p; L=p; p->next=NULL; } /* L=head->next; for(i=1;i<=a;i++)监测链表创立成功与否 { printf("%d",L->id); L=L->next; }*/ return b; } void find(int a,int b)//查询发出当前请求的函数 { int i; if(head==NULL)//链表头节点为空,即当前系统中无进程 { printf("当前无进程!"); } else { fir=head; L=head->next; for(i=0;i<b;i++) { if(a==(int)L->id) { break; } else { fir=L; L=L->next; } } //循环寻找匹配进程id号的进程 printf("已找到%d号进程!还需资源%d个。\n",L->id,L->need); fir->next=L->next;//将该进程的前驱与后继相连 <-这里是出问题的地方,输入三个以上就会出现问题 L->next=NULL;//断开当前进程与链表直接按的链接,拿出进行单独操作 } } int commit(int a,custom *c)//进行资源分配函数 { if(c->next==NULL)//是否为头节点的指针 { fir=c; c=c->next;//是的话,向后移一位,保留头节点位置 } else { if(a>(int)c->need)//当前系统资源是否能满足节点所含进程的需求 { a=a+(int)c->allocation; if(c->next!=NULL) { fir->next=c->next; c->next=NULL; free(c); commit(a,fir->next); } else { free(c); } } } return a; } int judge(int a,int b,int c)//判断分配后系统的安全性 { custom *v,*r,*h;//虚拟链表所需指针 int s,f=0; h=(custom *)malloc(sizeof(custom)); fir=head->next; r=h; for(int k=0;k<b;k++)//创建虚拟链表,将进程链表所有进程继承至当前虚拟链表中 { v=(custom *)malloc(sizeof(custom)); v->need=fir->need; v->allocation=fir->allocation; fir=fir->next; r->next=v; r=v; v->next=NULL; }//虚拟链表建立完成 if(a>=(int)L->need)//判断当前进程请求是否能被满足 { printf("剩余资源可供给使用。\n"); a=a+(L->allocation); s=commit(b,h);//判断虚拟链表是否能找到一条安全序列,能的话进程全部运行完成后系统资源应重新归为最大资源量 if(s==c) f=1;//虚拟链表可以保证安全运行 } return f;//返回判断值 } int main() { int i,c,g,available,all,flag; printf("系统所有剩余空闲资源数为:"); scanf("%d",&available); all=available; printf("请问共有几个进程存在:"); scanf("%d",&i); printf("请输入各进程所需资源并分配初始资源:\n"); available=input(i,available);//输入所有进程,并返回剩余资源 printf("请输入允许发出请求的进程标识数:"); scanf("%d",&g); find(g,i);//寻找请求资源的进程 i=i-1; printf("%d号进程的请求资源数为:",g); scanf("%d",&L->request); c=available-(int)L->request; printf("正在判断是否安全。。。"); flag=judge(available,i,all);//判断分配资源后系统是否安全,并返回是否安全 if(flag==1)//判断后flag=1,安全,分配资源 { printf("请求安全,可以执行。"); available=commit(c,head); if(available==all) { printf("分配资源完成!"); } else printf("未知的错误?"); } else//flag=0,不安全,拒绝请求 { printf("请求不安全,禁止执行!"); } return 0; }

02-线性结构1 两个有序链表序列的合并----答案错误求解

本题要求实现一个函数,**将两个链表表示的递增整数序列合并为一个递增的整数序列。** 函数接口定义: ``` List Merge( List L1, List L2 ); ``` 其中List结构定义如下: ``` typedef struct Node *PtrToNode; struct Node {     ElementType Data; /* 存储结点数据 */     PtrToNode   Next; /* 指向下一个结点的指针 */ }; typedef PtrToNode List; /* 定义单链表类型 */ ``` **L1和L2是给定的带头结点的单链表,其结点存储的数据是递增有序的;函数Merge要将L1和L2合并为一个递增的整数序列。应直接使用原序列中的结点,返回归并后的链表头指针。** 裁判测试程序样例: ``` #include <stdio.h> #include <stdlib.h> typedef int ElementType; typedef struct Node *PtrToNode; struct Node {     ElementType Data;     PtrToNode   Next; }; typedef PtrToNode List; List Read(); /* 细节在此不表 */ void Print( List L ); /* 细节在此不表;空链表将输出NULL */ List Merge( List L1, List L2 ); int main() {     List L1, L2, L;     L1 = Read();     L2 = Read();     L = Merge(L1, L2);     Print(L);     Print(L1);     Print(L2);     return 0; } /* 你的代码将被嵌在这里 */ ``` 输入样例: 3 1 3 5 5 2 4 6 8 10 输出样例: 1 2 3 4 5 6 8 10  NULL NULL****   编译器:gcc 时间限制:400ms 内存限制:64MB 代码长度限制:16kB 判题程序:系统默认 作者:DS课程组 单位:浙江大学 我的答案: ``` List Merge( List L1, List L2 ){ PtrToNode p1,p2,q1,q2; p1 = L1; q1 = L2; p2 = L1->Next; q2 = L2->Next; while(p2&&q2){ if(p2->Data >= q2->Data){ q1->Next = q2->Next; q2->Next = p2; p1->Next = q2; p1 = p1->Next; q2 = q1->Next; } else{ p1 = p2; p2 = p2->Next; } } if(q2) p1->Next = q2; PtrToNode q3 = L2; L2->Next = NULL; free(q3); PtrToNode front = (PtrToNode)malloc(sizeof(struct Node)); front->Next = L1->Next; L1->Next = front; PtrToNode p3 = L1; L1 = L1->Next; p3->Next =NULL; free(p3); return L1; } ``` ******我的想法是直接在L1中进行排序: 设置p1,p2指向L1链表,其中p2指向L1的当前结点,初始化为第一个节点;p1指向当前结点的前一节点,方便L2结点插入,初始化为头节点。 设置q1,q2指向L2链表,其中q2指向L2的当前结点,初始化为第一个节点;q1指向当前结点的前一节点,方便q2重新定位,不过没太多用处。 然后比较 p2->Data 和 q2>Data,知道其中一方为空。 q2->Data小的话,则将q2指向的结点插入到L1中。 p2->Data小的话,则将p1,p2都指向下一位。 比较到p2,q2其中一方为空。 如果L2还有剩余(即p2先指向NULL),则将其接到的p1后。 最后由于原L1,L2需输出为空,所以建立一个结点 front,先头插到L1原头结点和第一个节点之间。 然后将L1原头结点free,L2则直接free。 思路是如此。但答案错误........ 也从网上看到其他人的答案,思路比我更好,也更容易理解。 但还是不明白自己哪部错了。 向大家求解,多谢!!!******

【新手提问】单链表输出首行字符串末尾出现乱码?

主要是利用单链表存储图书信息,计算图书平均价格并修改图书价格后输出。 运行结果如图 ![图片说明](https://img-ask.csdn.net/upload/201905/27/1558972137_435460.png) 几乎一切结果输出都很正常,就是不知道为什么第一行图书名称的末尾竟有乱码,重重复复检查运行,第一行末尾始终有乱码,却又不是整段乱码,请问这是什么问题? ``` #include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct LNode { char no[20]; char name[50]; float price; struct LNode *next; }LNode,*LinkList; int main() { int n=0; LNode *p,*q; float Average(LinkList L, int n); void change(LinkList L, float aver); LinkList L = (LinkList)malloc(sizeof(LinkList));//头结点 L->next = NULL;//指针初始化 q = L; while (1) { p = (LNode *)malloc(sizeof(LNode));//新结点 p->next = NULL; scanf_s("%s %s %f", p->no, 20, p->name, 50, &p->price); if (p->no[0] == '0'&&p->name[0] == '0'&&p->price == 0) break; q->next = p; q = p; } p = L->next; while (p != NULL) {//计结点个数 n++; p = p->next; } printf("%.2f\n", Average(L, n)); change(L,Average(L, n)); system("PAUSE"); return 0; } float Average(LinkList L, int n) {//计算平均价格 LNode *p; float sum=0; p = L->next; while (p != NULL) { sum = sum + p->price; p = p->next; } return sum / n; } void change(LinkList L, float aver) {//改变价格并输出 LNode *p; p = L->next; while (p != NULL) { if (p->price < aver) p->price = (1 + 0.2)*p->price; else p->price = (1 + 0.1)*p->price; p = p->next; } p = L->next; while (p != NULL) { printf("%s %s %.2f\n", p->no, p->name, p->price); p = p->next; } } ```

关于栈的Top操作的问题 c语言实现 链表实现 数据结构

头文件 struct Node{ int data; struct Node *Next; }; typedef struct Node *PtrToNode; typedef PtrToNode Stack; int IsEmpty(Stack S); void MakeEmpty(Stack S); Stack CreateStack(void); void Push(int X,Stack S); int Top(Stack S); void Pop(Stack S); #include <stdio.h> #include "stack.h" #include <stdlib.h> int IsEmpty(Stack S) { return S->Next == NULL; } void MakeEmpty(Stack S) { if(S == NULL) printf("must"); else while(!IsEmpty(S)) Pop(S); } Stack CreateStack(void) { Stack S; S = malloc(sizeof(struct Node)); if(S == NULL) printf("Out of range"); S->Next = NULL; MakeEmpty(S); return S; } void Push(int X,Stack S) { PtrToNode TmpCell; TmpCell = malloc(sizeof(struct Node)); if(TmpCell == NULL) printf("Out of range"); else { TmpCell->data = X; TmpCell->Next = S->Next; S->Next = TmpCell; } } int Top(Stack S) { if(!IsEmpty(S)) return S->Next->data; printf("Out of range"); return 0; } void Pop(Stack S) { PtrToNode FirstCell; if(IsEmpty(S)) printf("Out of range"); else { FirstCell = S->Next; S->Next = S->Next->Next; free(FirstCell); } } 这个基本上是照书一点一点打的,我不太懂关于Top操作 为什么知道了指向栈底部的指针S就可以用 S->Next->data 得知栈顶元素,这个我自己实验过是对的。 因为假如这个栈是由3个链表连起来的,S->Next->data应该得到的是第二个链表里面的元素啊。 S->Next->Next->data才是栈顶的元素。 我也曾怀疑过是不是Push操作改变了指针S指向的地方。。但打印出的S的地址都是一样啊。 顺便可以问一下,假如我要打印某个地址 是应该 用 %d 吗,我的文本编辑器总报warning。。 提一下我的文本编辑器是geany 编译器是gcc Linux下 我是小白。。求指教啊啊啊啊。。google后也不明白。。卡了好几天了 希望有人可以帮我一下..

我写的链表,每次到末尾插入的时候就会报错 调试的时候出现segmentation fault 请大佬看看时怎么回事

#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct stu{ int score; char name[10]; struct stu *next; }STU; STU *creat1(STU *head,int n); STU *creat2(STU *head,STU *tail,int n); void myprintf(STU*); STU *insert(STU *head); STU *delet(STU *head); int main(){ int n,num; STU *head=NULL;//头指针 STU *tail=NULL;//尾指针 记得初始化为NULL。 char name[10]; printf("*********1.创建链表。***********************\n"); printf("*********2.输出所有的节点内容。*************\n"); printf("*********3.插入一个新的节点。***************\n"); printf("*********4.删除一个节点。*******************\n"); printf("*********5.修改一个节点。*******************\n"); printf("*********6.结束操作。***********************\n"); printf("请输入指令:"); scanf("%d",&n); do{ switch(n){ case 1: printf("请输入节点数:"); scanf("%d",&num); head=creat2(head,tail,num); break; case 2: myprintf(head); break; case 3: head=insert(head); break; case 4: head=delet(head); break; // case 5:change(head); break; case 6: printf("欢迎您再次使用!"); break; default:printf("请输入正确的数值!"); scanf("%d",&n); continue; } if(n!=6){ printf("请输入指令:"); scanf("%d",&n); } }while(n!=6); return 0; } /*struct stu *creat1(STU *head,int n){//头部差法。最后一个输入的第一个出现,后面的直接插在头上。 STU *p; int i;// for(i=0;i<n;i++){ p=(STU*)malloc(sizeof(STU));//先给指针分配空间,这是创建的第一件事。 printf("请输入学生的分数:"); scanf("%d",&p->score); printf("请输入学生的名字:"); scanf("%s",&p->name); p->next=head; head=p;//这两步可以用图理解 不然死记也行。 } return head; }*/ STU*creat2(STU *head,STU *tail,int n){//尾部差法。最后一个输出在最后一个出现,后面的在后面加。 STU *p; int i; for(i=0;i<n;i++){ p=(STU*)malloc(sizeof(STU)); printf("请输入学生的分数:"); scanf("%d",&p->score); printf("请输入学生的名字:"); scanf("%s",&p->name); p->next=NULL; if(head==NULL) head=p; else tail->next=p; tail=p; } return head; } void myprintf(struct stu *head){ STU*p; p=head; do{ printf("%3d %s\n",p->score,p->name); p=p->next; }while(p!=NULL); } STU*insert(STU *head){//按一定的顺序插入,之前就要保证是按顺序的。 这个是从小到大排序。 STU *p=NULL,*p2=NULL,*p1=NULL; int i; p=(STU*)malloc(sizeof(STU)); printf("请输入新加入的学生的分数:"); scanf("%d",&p->score); printf("请输入新加入的学生的名字:"); scanf("%s",&p->name); p2=head; /*while (p2->score<p->score && p2){//当插到最后一个点时会报错 我也不知道怎么改了。。。 p1=p2; p2=p2->next; } if(!p2){//新插入的学生的分数最高 ,在最后面。 p1->next=p; p->next=NULL; } else if(p2==head){//新插入的学生分最少,在最前面。 p->next=p2; head=p; } else{//新插入的同学的中间的一个。 p1->next=p; p->next=p2; }*/ return head; } STU *delet(STU *head){ STU *p1=NULL,*p2=NULL; char t[10]; printf("请输入要删除的学生的名字:"); scanf("%s",t); p1=head; p2=head; while (strcmp(p2->name,t) && p2){ p1=p2; p2=p2->next; } if(!p2) printf("没有找到该同学!"); else if(p2==head){ head=p2->next; free(p2); } else if(!p2->next){ p1->next=NULL; free(p2); } else { p1->next=p2->next; free(p2); } return head; } ``` ``` ``` ```

如果能重来,我不会选择北漂——初见北京

一个人走的路

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

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

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

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

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

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

2020年大厂Java面试前复习的正确姿势(800+面试题答案解析)

前言 个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、 丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油! 本篇分享的面试题内容包括:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Redis、MySQL、Spring、SpringBoot、SpringCloud、RabbitMQ...

抖音上很火的时钟效果

反正,我的抖音没人看,别人都有几十万个赞什么的。 发到CSDN上来,大家交流下~ 主要用到原生态的 JS+CSS3。 具体不解释了,看注释: &lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Title&lt;/tit...

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

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

又出事了?网站被攻击了?高中生?

北京时间2020年3月27日9点整,如往常一样来到公司,带开电脑,正准备打开Github网站看一会源代码,再开始手头的工作。哟吼,一直打不开,一直出现如下页面: 我想很多网友也尝到了甜头,各大技术群炸开了锅,据网友反馈有攻击者正在发起大规模的中间人挟持,京东和Github等网站等网站都受到了影响。 什么是中间中间人挟持呢? 简而言之,就是攻击者在数据网络传输的过程中,截获传输过程中的数据并篡改...

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

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

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

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

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

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

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

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

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

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

我把华为小米年报放一起,发现华为才是真·手机公司,小米确实不靠卖手机赚钱...

郭一璞 发自 凹非寺量子位 报道 | 公众号 QbitAI国产手机界的两大玩家,华为&amp;小米,昨天在同一天前后脚发布了2019年财报。同行冤家,发财报也碰在了同一天。那我们就对比...

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

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

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的生命...

毕业5年,我熬夜整理出了这50个优质的电子书网站,吐血推荐!

大家好,我是武哥,最近经常有小伙伴问我要电子书,都什么年代了,还找不到电子书吗?如果要说原因,那就是你还没遇到武哥我(手动滑稽~)!我今天把这么多年我经常看的电子书网站整理一下给大家,基本上能解决大家的需求。不管是在校生还是已经工作了,相信肯定对你有所帮助! 1.鸠摩搜书 首先给大家推荐的网站是:鸠摩搜书 地址:https://www.jiumodiary.com/ 这个网上非常棒,上面有很多优质...

MySQL性能优化(五):为什么查询速度这么慢

前期回顾: MySQL性能优化(一):MySQL架构与核心问题 MySQL性能优化(二):选择优化的数据类型 MySQL性能优化(三):深入理解索引的这点事 MySQL性能优化(四):如何高效正确的使用索引 前面章节我们介绍了如何选择优化的数据类型、如何高效的使用索引,这些对于高性能的MySQL来说是必不可少的。但这些还完全不够,还需要合理的设计查询。如果查询写的很糟糕,即使表结构再合理、索引再...

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

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

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

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

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

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

总结了Mybatis,原来知识点也没多少嘛

看完这篇Mybatis,感觉你三天就会用了。

爬虫(101)爬点重口味的

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

疫情后北上广深租房价格跌了吗? | Alfred数据室

去年3月份我们发布了《北上广深租房图鉴》(点击阅读),细数了北上广深租房的各种因素对租房价格的影响。一年过去了,在面临新冠疫情的后续影响、城市尚未完全恢复正常运转、学校还没开学等情况下...

面试官给我挖坑:a[i][j] 和 a[j][i] 有什么区别?

点击上方“朱小厮的博客”,选择“设为星标”后台回复&#34;1024&#34;领取公众号专属资料本文以一个简单的程序开头——数组赋值:int LEN = 10000; int[][] ...

在拼多多上班,是一种什么样的体验?我心态崩了呀!

之前有很多读者咨询我:武哥,在拼多多上班是一种什么样的体验?由于一直很忙,没抽出时间来和大家分享。上周末特地花点时间来写了一篇文章,跟大家分享一下拼多多的日常。 1. 倒时差的作息 可能很多小伙伴都听说了,拼多多加班很严重。这怎么说呢?作息上确实和其他公司有点区别,大家知道 996,那么自然也就能理解拼多多的“11 11 6”了。 所以当很多小伙伴早上出门时,他们是这样的: 我们是这样的: 当...

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