链式队列 有表头
来源:互联网 发布:网络用语arp是什么意思 编辑:程序博客网 时间:2024/05/28 18:43
#ifndef QUEUE_H_INCLUDED
#define QUEUE_H_INCLUDED
typedef int elem;
//有头结点 好处在于插入时候比较简单 空表的插入也是一样的 但是出的时候要单独考虑空表
struct node
{
elem data;
struct node*next;
};
typedef struct
{
struct node*front;
struct node*rear;
}queue;
//typedef struct node* queue;
int Empty(queue Q)
{
if(Q.front==Q.rear) return 1;
return 0;
}
int length(queue Q)
{
int len;
for(len=0;Q.front!=Q.rear;Q.front=Q.front->next)
len++;
return len;
}
queue Initial(queue Q)//初始化
{
Q.front=(struct node*)malloc(sizeof(struct node));
Q.front->next=NULL;
Q.rear =Q.front;
return Q;
}
queue EnQueue(queue Q,elem x)//入队
{
struct node*newnode=(struct node*)malloc(sizeof(struct node));
newnode->data=x;
newnode->next=NULL;
Q.rear->next=newnode;
Q.rear=Q.rear->next;//空队列有表头 所以可以引用next
return Q;
}
queue DeQueue(queue Q,elem*x)//出队列
{
if(Empty(Q)) {printf("empty queue\n");exit(0);}
*x=Q.front->next->data;
struct node*tmp=Q.front->next;
Q.front->next = tmp->next;
if(Q.rear==tmp) Q.rear=Q.front;//只有一个的时候 需要修改rear
free(tmp);
return Q;
}
void Print(queue Q)
{
printf("queue has %d elements.\n",length(Q));
for(;Q.front!=Q.rear;Q.front=Q.front->next)
printf("%d\t",Q.front->next->data);
printf("\n");
}
#endif // QUEUE_H_INCLUDED
#define QUEUE_H_INCLUDED
typedef int elem;
//有头结点 好处在于插入时候比较简单 空表的插入也是一样的 但是出的时候要单独考虑空表
struct node
{
elem data;
struct node*next;
};
typedef struct
{
struct node*front;
struct node*rear;
}queue;
//typedef struct node* queue;
int Empty(queue Q)
{
if(Q.front==Q.rear) return 1;
return 0;
}
int length(queue Q)
{
int len;
for(len=0;Q.front!=Q.rear;Q.front=Q.front->next)
len++;
return len;
}
queue Initial(queue Q)//初始化
{
Q.front=(struct node*)malloc(sizeof(struct node));
Q.front->next=NULL;
Q.rear =Q.front;
return Q;
}
queue EnQueue(queue Q,elem x)//入队
{
struct node*newnode=(struct node*)malloc(sizeof(struct node));
newnode->data=x;
newnode->next=NULL;
Q.rear->next=newnode;
Q.rear=Q.rear->next;//空队列有表头 所以可以引用next
return Q;
}
queue DeQueue(queue Q,elem*x)//出队列
{
if(Empty(Q)) {printf("empty queue\n");exit(0);}
*x=Q.front->next->data;
struct node*tmp=Q.front->next;
Q.front->next = tmp->next;
if(Q.rear==tmp) Q.rear=Q.front;//只有一个的时候 需要修改rear
free(tmp);
return Q;
}
void Print(queue Q)
{
printf("queue has %d elements.\n",length(Q));
for(;Q.front!=Q.rear;Q.front=Q.front->next)
printf("%d\t",Q.front->next->data);
printf("\n");
}
#endif // QUEUE_H_INCLUDED
- 链式队列 有表头
- 链式队列 无表头
- 链式队列
- 链式队列
- 链式队列
- 链式队列
- 队列--链式
- 链式队列
- 链式队列
- 链式队列
- 链式队列
- 链式队列
- 队列-链式
- 链式队列
- 链式队列
- 链式队列
- 链式队列
- 链式队列
- Scrum introduction
- 单链表的拆分
- tomcat地址栏传中文
- C++ map的基本操作和使用
- C语言函数调用的汇编实现
- 链式队列 有表头
- 单链表连续删除
- 浏览器缓存机制
- 编译libvirt源码,替换apt-get安装的libvirt包
- 单链表排序
- 计算卷积 (汇编)
- wireshark插件开发
- 链式队列 无表头
- Android Listview与Checkbox结合实现选择,删除,显示选择结果