首先介绍一下栈和队列的基本书写代码。
栈的书写情况:
#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h>
typedef struct Node * List;
struct Node
{
int number;
List next;
};
List Create(int n);
int main()
{
List list;
int n;
scanf("%d",&n);
list = Create(n);
while (list)
{
printf("%d",list->number);
list = list->next;
}
}
List Create(int n)
{
List L, t,cycle;
L = (List)malloc(sizeof(struct Node));
L->next = NULL;
t = L;
for (int i=0;i<n;i++)
{
List temp;
temp = (List)malloc(sizeof(struct Node));
temp->next = NULL;
int number;
scanf("%d",&number);
temp->number = number;
temp->next = t->next;
t->next = temp;
}
cycle = L;
L = L->next;
free(cycle);
return L;
}
队列的书写情况:
#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h>
typedef struct Node * List;
struct Node
{
int number;
List next;
};
List Create(int n);
int main()
{
List list;
int n;
scanf("%d",&n);
list = Create(n);
while (list)
{
printf("%d",list->number);
list = list->next;
}
}
List Create(int n)
{
List L, t,cycle;
L = (List)malloc(sizeof(struct Node));
L->next = NULL;
t = L;
for (int i=0;i<n;i++)
{
List temp;
temp = (List)malloc(sizeof(struct Node));
temp->next = NULL;
int number;
scanf("%d",&number);
temp->number = number;
temp->next = t->next;
t->next = temp;
}
cycle = L;
L = L->next;
free(cycle);
return L;
}
通过以上的代码不免看出,队列和栈的主要区别在于:
//栈:
temp->next=t->next;
t->next=temp;
//队列:
t->next=temp;
t=temp;
可能有不少人在看到这几行代码的时候,觉得栈与队列的操作模式十分相近,无法准确区别开代码中的先进先出,先进后出的区别。
我个人就自己的理解,简易地画了一个示意图,希望能帮到大家。