链式队列
#include "./02linkqueue.h"
l_pos* creat_link()
{
str* head=(str*)malloc(sizeof(str));
if(head==NULL)
{
printf("创建头结点失败\n");
return (l_pos*)-1;
}
l_pos* pos=(l_pos*)malloc(sizeof(l_pos));
if(pos==NULL)
{
printf("储存队列头尾地址空间创建失败\n");
free(head);
return (l_pos*)-1;
}
pos->front=head;
pos->rear=head;
return pos;
}
//入队(尾插法);
void insetr_link(l_pos* pos ,dataType data)
{
str* temp=(str*)malloc(sizeof(str));
if(temp==NULL)
{
printf("创建节点失败\n");
return;
}
temp->txt.data=data;
temp->next=NULL;
pos->rear->next=temp;
temp->next=NULL;
pos->rear=temp;
pos->front->txt.len++;
return;
}
//出队(头删)
dataType head_shanlink(l_pos* pos)
{
if(pos->front->next == NULL)
{
printf("对列中无数据,删除失败");
return (dataType)-1;
}
dataType data=pos->front->next->txt.data;
if(pos->front->next->next==NULL)
{
pos->front->next=NULL;
pos->rear=pos->front;
}
else
{
pos->front->next=pos->front->next->next;
}
pos->front->txt.len--;
return data;
}
//遍历
void show_link(l_pos* pos)
{
str* p = pos->front;
while(p->next != NULL)
{
p=p->next;
printf("%d ",p->txt.data);
}
printf("\n");
return;
}
#include "./02linkqueue.h"
int main(int argc, const char *argv[])
{
l_pos* pos=creat_link();
insetr_link(pos ,100);
insetr_link(pos ,200);
insetr_link(pos ,300);
insetr_link(pos ,400);
show_link(pos);
printf("%d \n",head_shanlink(pos));
printf("%d \n",head_shanlink(pos));
printf("%d \n",head_shanlink(pos));
show_link(pos);
return 0;
}
#ifndef __LINK_QUEUE_H
#define __LINK_QUEUE_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int dataType;
typedef struct node{
union{
dataType data;
int len;
}txt;
struct node* next;
}str;
typedef struct {
str* front;
str* rear;
}l_pos;
l_pos* creat_link();
void insetr_link(l_pos* pos ,dataType data);
dataType head_shanlink(l_pos* pos);
void show_link(l_pos* pos);
#endif
2.顺序队列
#include "02sequeue.h"
//创建队列
que* create_sequeue()
{
que* sq=(que*)malloc(sizeof(que));
if(sq==NULL)
{
printf("创建队列失败");
return NULL;
}
memset(sq,0,sizeof(que));
return sq;
}
//判满
int sequeuefull(que* sq)
{
return sq->front==(sq->rear+1)%N ? 1: 0;
}
//入队
void insert_sequeue(que* sq, dataType data)
{
if(sequeuefull(sq))
{
printf("队列已满,入队失败\n");
return;
}
sq->data[sq->rear]=data;
sq->rear=(sq->rear+1)%N;
return;
}
//判空
int kong_sequeue(que* sq)
{
return sq->front==sq->rear? 1: 0;
}
//出队
dataType chu_sequeue(que* sq)
{
if(kong_sequeue(sq))
{
printf("队列已空");
return (dataType)-1;
}
dataType data=sq->data[sq->front];
sq->front=(sq->front+1) % N;
return data;
}
//遍历
void show_sequeue(que* sq)
{
for(int i=sq->front; i != sq->rear ; i=(i+1)%N)
{
printf("%d ",sq->data[i]);
}
printf("\n");
return;
}
//元数个数
int geshu_sequeue(que* sq)
{
return (sq->rear-sq->front+N)%N;
}
#ifndef __SEQUEUE_H__
#define __SEQUEUE_H__
#define N 10
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int dataType;
typedef struct onde
{
dataType data[N];
int front;
int rear;
}que;
que* create_sequeue();
void insert_sequeue(que* sq, dataType data);
dataType chu_sequeue(que* sq);
void show_sequeue(que* sq);
int geshu_sequeue(que* sq);
#endif
#include "02sequeue.h"
int main(int argc, const char *argv[])
{
que* sq=create_sequeue();
insert_sequeue(sq, 20);
insert_sequeue(sq, 30);
insert_sequeue(sq, 40);
insert_sequeue(sq, 50);
insert_sequeue(sq, 60);
insert_sequeue(sq, 70);
insert_sequeue(sq, 80);
printf("%d\n",chu_sequeue(sq));
show_sequeue(sq);
geshu_sequeue(sq);
printf("%d \n",geshu_sequeue(sq));
return 0;
}