1、无法登陆TP-LINK路由器
原因是电脑的IP地址不是192.168.1.X;
设置电脑的无线连接的静态IP为192.168.1.2;登陆路由器即可
2、没有用malloc给q分配内存的错误提示
3、定义函数出现的错误
假如create函数要用到queue()函数:那么queue函数一定要定义在create函数之前.下面的情况会出错
queue *create() { ................. } void in_queue(queue *q,int x ) { .............................. }
4、带头结点队列的总结
1、要考虑删除最后一个节点后队列为空的情况
2、队列为空的条件什么
3、三个create函数的异同(见代码)
4、链式队列一般不用考虑堆满的情况
//这是一个带头结点的队列,头结点的指向始终不变,实际上头结点不是队列的一部分。只是为了边界问题的统一操作 #include<stdio.h> #include<malloc.h> typedef struct student//队列结点 { int data; struct student *next; }node; typedef struct queue//队头指针(保持不变)和队尾指针(入队时会发生变化) { node *front; node *rear; }queue; void in_queue(queue *q,int x ) //带头结点的好处是入队操作统一,不用考虑边界情况 { node *s=(node *)malloc(sizeof(node)); s->data=x; s->next=NULL; q->rear->next=s; q->rear=s; } void out_queue(queue *q)//出队操作仍然要考虑边界情况(即删除最后一个节点后,队列为空) { node *p; if((q->front==q->rear)) //队列是否为空 printf("queue is already NULL\n"); else { p=q->front->next; //p为待删除的节点 q->front->next=q->front->next->next;//删除最后一个节点之后 if(p==q->rear) q->rear=q->front;//这句话很关键,目的是为了应对删除p之后,队列为空的情况,表示删除最后一个节点后,需要人为把队列至空(q->rear=q->front) printf("%d is out\n",p->data); free(p); } } queue *create()//和create1对比,create函数利用了返回值 { queue *q=(queue *)malloc(sizeof(queue)); int x=0; q->front=(node *)malloc(sizeof(node)); q->front->data=0; q->front->next=NULL; q->rear=q->front; printf("please input data:"); scanf("%d",&x); while(x!=0) { in_queue(q,x); printf("please input data:"); scanf("%d",&x); } return q; } void create1(node *front,node *rear) //思考create1为什么不能创建队列?因为要修改指针front和rear,必须传入的是这两个指针的地址。 { //queue *q=(queue *)malloc(sizeof(queue)); int x=0; front=(node *)malloc(sizeof(node)); front->data=0; front->next=NULL; rear=front; printf("please input data:"); scanf("%d",&x); while(x!=0) { node *s=(node *)malloc(sizeof(node)); s->data=x; s->next=NULL; rear->next=s; rear=s; printf("please input data:"); scanf("%d",&x); } //return q; } void create2(queue *q)//这里没有利用返回值,为什么成功了?原因是q指针里存的内容就是front和rear指针,这里q就是相当于指针front和rear的地址 { int x=0; q->front=(node *)malloc(sizeof(node)); q->front->data=0; q->front->next=NULL; q->rear=q->front; printf("please input data:"); scanf("%d",&x); while(x!=0) { in_queue(q,x); printf("please input data:"); scanf("%d",&x); } } void display(queue *q) { node *p=q->front->next; while(p!=NULL) { printf("%d ",p->data); p=p->next; } printf("\n"); } void main() { /* *********方法一:create函数为什么成功********** */ queue *q=create(); /* *******方法二:create1()为什么失败 ********/ /*queue *q=(queue *)malloc(sizeof(queue)); q->front=(node *)malloc(sizeof(node)); q->front->data=0; q->front->next=NULL; q->rear=q->front; create1(q->front,q->rear);*/ /*****************方法三:create2为什么成功**************************/ //queue *q=(queue *)malloc(sizeof(queue)); //create2(q); out_queue(q); out_queue(q); display(q); }
6、什么是静态链表?
http://blog.csdn.net/jnu_simba/article/details/8831150
typedef struct Node
{
ElemType data; //存放数据
int cur; //存放下一个节点的下标,为0时表示无指向
} StaticLinkList[MAXSIZE];