チェーンキューのC言語実現
2224 ワード
#include
#include
#define ERROR 0
#define OK 1
typedef int Status ;
typedef int ElemType;
typedef struct Lnode
{
ElemType data;
Lnode* next;
}Lnode, *Link;
typedef struct queue
{
Link head;
Link tail;
int len;
} queue;
Status Init(queue &qq)
{
qq.head = (Link)malloc(sizeof(Lnode));
if (qq.head == NULL) return ERROR;
qq.tail = qq.head;
qq.head -> next = NULL;
qq.len = 0;
return OK;
}
Status GetTop(queue &qq, ElemType &e)
{
if (qq.head == qq.tail)
return ERROR;
e = qq.head->next->data;
return OK;
}
Status Enqueue(queue &qq, ElemType e)
{
Link temp;
temp = (Link)malloc(sizeof (Lnode));
if (temp == NULL) return ERROR;
temp->data = e;
qq.tail -> next = temp;
qq.tail = temp;
qq.len++;
qq.tail -> next = NULL;
return OK;
}
Status Dequeue(queue &qq, ElemType &e)
{
if (qq.head == qq.tail)
return ERROR;
e = qq.head -> next -> data;
Link p = qq.head -> next;
free(p);
p = NULL;
qq.head -> next = qq.head ->next ->next;
if (qq.head -> next == NULL) // , ,
qq.tail = qq.head;
return OK;
}
Status Destroyqueue(queue &qq)
{
Link q, tmp;
q = qq.head -> next;
free(qq.head);
qq.head = NULL;
while(q != NULL)
{
tmp = q -> next;
free(q);
q = tmp;
}
tmp = NULL;
return OK;
}
int main()
{
queue qq;
int m, i;
Init(qq);
printf("how many nums?
");
scanf("%d", &m);
for (i = 0; i < m; i++)
{
int e;
scanf("%d", &e);
Enqueue(qq, e);
}
int d;
GetTop(qq, d);
printf("%d
", d);
for(i = 0; i < m; i++)
{
int e;
Dequeue(qq, e);
printf("%d ", e);
}
printf("
");
system ("pause");
return 0;
}