抽象数据类型队列的定义
队列的顺序表示和实现
队列的链式表示和实现
进队出队
程序实现
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
enum return_result {FULL_OK,FULL_NO,EMPTY_OK,EMPTY_NO,PUSH_OK};
struct quece_data
{
int quece[MAX_SIZE];
int top;
int buttom;
};
typedef struct quece_data Quece;
void create_quece(Quece ** quece)
{
*quece = (Quece *)malloc(sizeof(Quece));
}
void init_quece(Quece * quece)
{
quece->top = -1;
quece->buttom = -1;
}
int is_full(Quece * quece)
{
if(quece->buttom == -1)
{
if(quece->top == MAX_SIZE - 1)
return FULL_OK;
}
else if(((quece->top - quece->buttom) + 1) == MAX_SIZE)
{
return FULL_OK;
}
return FULL_NO;
}
int is_empty(Quece * quece)
{
if(quece->top <= quece->buttom)
{
return EMPTY_OK;
}
return EMPTY_NO;
}
int push_quece(Quece * quece,int num)
{
int i;
if(is_full(quece) == FULL_OK)
{
printf("the quece is FULL\n");
exit(FULL_OK);
}
if(quece->top <= MAX_SIZE - 1)
{
quece->top++;
quece->quece[quece->top] = num;
}
else
{
for(i = quece->buttom; i <= quece->top; i++)
{
quece->quece[i - quece->buttom] = quece->quece[i];
}
quece->top = quece->top - quece->buttom + 1;
quece->buttom = 0;
quece->top++;
quece->quece[quece->top] = num;
}
return PUSH_OK;
}
int pop_quece(Quece * quece)
{
if (is_empty(quece) == EMPTY_OK )
{
printf("the quece is empty");
exit(EMPTY_OK);
}
return (quece->quece[++(quece->buttom)]);
}
int main()
{
Quece * quece;
int i;
int ret;
create_quece(&quece);
init_quece(quece);
for(i = 0; i< 10; i++)
{
if(push_quece(quece,i+1) == PUSH_OK)
{
printf("push num:\t %d \n",i + 1);
}
}
for(i = 0; i < 10; i++)
{
printf("pop num:\t %d \n",pop_quece(quece));
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
enum return_result {FULL_OK,FULL_NO,EMPTY_OK,EMPTY_NO,PUSH_OK};
struct quece_data
{
int quece;
struct quece_data * next;
};
typedef struct quece_data Quece;
typedef struct quece_data * Link;
void create_quece(Quece ** quece)
{
*quece = (Quece *)malloc(sizeof(Quece));
}
void init_quece(Quece * quece)
{
quece->quece = -1;
}
int is_empty(Quece * quece)
{
if(quece->next == NULL)
{
return EMPTY_OK;
}
return EMPTY_NO;
}
int push_quece(Quece * quece,Link new_node,int num)
{
new_node->quece = num;
Link temp = quece;
while( temp->next != NULL)
{
temp = temp->next;
}
new_node->next = NULL;
temp->next = new_node;
return PUSH_OK;
}
int pop_quece(Quece * quece)
{
Link temp = quece->next;
int tem;
if (is_empty(quece) == EMPTY_OK )
{
printf("the quece is empty");
exit(EMPTY_OK);
}
if(temp != NULL)
{
tem = temp->quece;
quece->next = temp->next;
free(temp);
}
return tem;
}
int main()
{
Quece * quece;
Quece * new_node;
int i;
int ret;
create_quece(&quece);
init_quece(quece);
for(i = 0; i< 10; i++)
{
create_quece(&new_node);
if(push_quece(quece,new_node,i + 1) == PUSH_OK)
{
printf("push num:\t %d \n",i + 1);
}
}
for(i = 0; i < 10; i++)
{
printf("pop num:\t %d \n",pop_quece(quece));
}
return 0;
}