您的位置:首页 > 其它

算法导论12:队列的链表实现 2016.1.12

2016-01-12 12:11 381 查看
普通的链表队列和栈的实现差不多,只是修改一下进出的规则即可。(感觉自己就像在翻译算法导论的伪代码一样。。不过还好吧,也有一点自己的理解)

下面是代码:

#include<stdio.h>
#include<stdlib.h>

typedef struct _node{
int num;
struct _node *next;
}node;

struct queue {
node * head;
node * tail;
}Q;

void build(struct queue &Q)
{
Q.tail=(node *)malloc(sizeof(node));
Q.tail->next=NULL;
Q.head=(node *)malloc(sizeof(node));
Q.head->next=Q.tail;
}

int Qempty(struct queue &Q)
{
if ((Q.head)->next==Q.tail) return 1;
else return 0;
}

int dequeue(struct queue &Q)
{
if (Qempty(Q)) {
printf("空队列!\n");
}
else {
node *p;
p=Q.head;
Q.head=(Q.head)->next;
int k=p->num;
free(p);
return k;
}
}

void init(struct queue &Q)
{
while (!Qempty(Q)) {
dequeue(Q);
}
}

void enqueue(struct queue &Q,int n)
{
node *p;
p=(node *)malloc(sizeof(node));
p->num=n;
p->next=Q.head;
Q.head=p;
}

void showqueue(struct queue Q)
{
while ((Q.head)->next!=Q.tail){
int k=(Q.head)->num;
Q.head=(Q.head)->next;
printf("|%d|\n",k);
}
printf("| |\n");
}

int main()
{
printf("1:初始化队列;2:入队列;3:出队列;4:退出。\n");
build(Q);
int n;
while (1) {
int k;
scanf("%d",&k);
switch(k) {
case 1:init(Q); break;
case 2:scanf("%d",&n); enqueue(Q,n); break;
case 3:dequeue(Q); break;
case 4:return 0;
}
showqueue(Q);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: