97 lines
1.8 KiB
C
97 lines
1.8 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <memory.h>
|
|
/**
|
|
* 数据结构,队列 感觉和栈差不多吧,一个先进后出,一个先进先出
|
|
* 用双向链表的速度将快一些,本例采用双向链表,就不需要再检索倒数第二个节点,记录最后一个节点即可
|
|
*/
|
|
struct queue;
|
|
typedef struct queue *prt_queue;
|
|
//3->2->1->3
|
|
struct queue
|
|
{
|
|
int data;
|
|
prt_queue last; //上一个
|
|
prt_queue next; //下一个
|
|
};
|
|
|
|
//3<=>2<=>1
|
|
//3<=>2
|
|
//3
|
|
/**
|
|
* 出队列
|
|
*/
|
|
int pop(prt_queue *end)
|
|
{
|
|
if (*end == NULL)
|
|
{
|
|
return 0;
|
|
}
|
|
int ret_data = (*end)->data;
|
|
prt_queue *tmp = end;
|
|
*end = (*end)->last;
|
|
if ((*end) != NULL)
|
|
{
|
|
(*end)->next = NULL;
|
|
}
|
|
free(tmp);
|
|
return ret_data;
|
|
}
|
|
//1
|
|
//2<=>1
|
|
//3<=>2<=>1
|
|
/**
|
|
* 进入队列
|
|
*/
|
|
prt_queue push(int data, prt_queue *h)
|
|
{
|
|
prt_queue tmp_node = malloc(sizeof(struct queue));
|
|
(*h)->last = tmp_node;
|
|
memset(tmp_node, 0, sizeof(struct queue));
|
|
tmp_node->data = data;
|
|
tmp_node->next = *h;
|
|
*h = tmp_node;
|
|
return tmp_node;
|
|
}
|
|
/**
|
|
* 创建栈
|
|
*/
|
|
prt_queue create_queue(int data)
|
|
{
|
|
prt_queue header = malloc(sizeof(struct queue));
|
|
memset(header, 0, sizeof(struct queue));
|
|
header->data = data;
|
|
return header;
|
|
}
|
|
|
|
void print_queue(prt_queue *end)
|
|
{
|
|
int data = 0;
|
|
while ((data = pop(end)) != 0)
|
|
{
|
|
printf("%d\t", data);
|
|
}
|
|
}
|
|
#ifndef MAIN_FUNC
|
|
int main()
|
|
{
|
|
prt_queue queue = create_queue(1);
|
|
prt_queue end_node = queue;
|
|
push(23, &queue);
|
|
push(15, &queue);
|
|
push(123, &queue);
|
|
push(36, &queue);
|
|
push(89, &queue);
|
|
push(16, &queue);
|
|
push(324, &queue);
|
|
push(526, &queue);
|
|
push(166, &queue);
|
|
push(984, &queue);
|
|
push(85, &queue);
|
|
pop(&end_node);
|
|
pop(&end_node);
|
|
print_queue(&end_node);
|
|
getchar();
|
|
return 0;
|
|
}
|
|
#endif |