#include <stdio.h>
#include <stdlib.h>
struct list
{
int data;
struct list *next;
};
typedef struct list L;
//pop函数展示第一个节点,想到达到队列后进后出的效果,则采用尾插
L *queueInsert (L *head, int data)
{
L *new = calloc(1, sizeof(L));
new->data = data;
new->next = NULL;
if(head == NULL)
head = new;
else
{
L *tmp = head;
while(tmp->next != NULL)
{
tmp = tmp->next;
}
tmp->next = new;
}
return head;
}
//由于下面的pop函数都是展示第一个节点,想要达到栈后进先出的效果,采用头插方法
L *stackInsert(L *head, int data)
{
L *new = calloc(1, sizeof(L));
new->data = data;
new->next = NULL;
if (head == NULL)
head = new;
else
{
new->next = head;
head = new;
}
return head;
}
L* pop(L *head)
{
L *tmp = head;
if (tmp == NULL)
{
printf("list is null\n");
return NULL;
}
else
{
printf("pop data:%d\n", tmp->data);
head = head->next;
free(tmp);
}
return head;
}
void travel(L *head)
{
L *node = head;
if (node == NULL)
{
printf("list is null\n");
}
while(node!= NULL)
{
printf("data:%d\n", node->data);
node = node->next;
}
return;
}
int main()
{
L *head1 = NULL;
L *head2 = NULL;
int i;
for (i = 0; i < 10; i++)
{
head1 = stackInsert(head1, i);
head2 = queueInsert(head2, i);
}
travel(head1);
printf("\n");
travel(head2);
printf("\n");
for(i = 0; i < 20; i++)
{
head1= pop(head1);
}
for(i = 0; i < 20; i++)
{
head2= pop(head2);
}
travel(head1);
printf("\n");
travel(head2);
printf("\n");
return 0;
}
单链表实现队列 栈
最新推荐文章于 2022-08-22 17:25:18 发布