3.28

3.28

 

 

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 typedef struct Node{
 4     int data;
 5     Node*next;
 6 }Node;
 7 typedef struct{
 8     
 9     Node *front,*rear;
10 }LinkQueue;
11 /*(1).真正有效的空间是有固定地址的空间:已malloc的空间(eg:Node)
12                                       以及在主函数中定义的对象所包含的空间 (eg:LinkQueue->front) 
13   (2).但工具指针也不能随意释放,否则会导致其指向结点的空间也被释放 
14  */ 
15 void Init(LinkQueue*Q)
16 {
17     Q->front=(Node*)malloc(sizeof(Node));
18     Q->rear=Q->front;
19 }
20 void Create(LinkQueue*Q)
21 {
22     int length;
23     Node*e,*r;
24     scanf("%d",&length);
25     r=Q->front;
26     for(int i=0;i<length;i++)
27     {
28         e=(Node*)malloc(sizeof(Node));
29         scanf("%d",&e->data);
30         r->next=e;
31         r=e;
32         
33     }
34     Q->rear=e;//(3).指针之间赋值赋的是其指向空间的地址,而非指针自身 
35     Q->rear->next=Q->front;
36 }
37 void In(LinkQueue*Q,Node e)
38 {
39     Node*q,*t=Q->front->next;
40     q=(Node*)malloc(sizeof(Node));
41     q->data=e.data;
42     while(t->next!=Q->front)t=t->next;
43     t->next=q;
44     Q->rear=q; 
45     q->next=Q->front; 
46 }
47 void Out(LinkQueue*Q)
48 {
49 Q->front->next=Q->front->next->next;    
50 }
51 void Order(LinkQueue*Q)
52 {
53     Node*t=Q->front->next;
54     while(t!=Q->front)
55     {
56         printf("%d ",t->data);
57         t=t->next;
58     }
59 }
60 int main()
61 {
62     LinkQueue Q;
63     Node e1;
64     Init(&Q);
65     Create(&Q);
66     scanf("%d",&e1.data);
67     In(&Q,e1);
68     Order(&Q);
69     printf("\n");
70     Out(&Q);
71     Order(&Q);    
72 }

 

上一篇:PostgreSQL 常用指令


下一篇:2021-9-27【数据结构/严蔚敏】【链队列】