数据结构--链队列基本操作

时间:2022-04-07 10:20:14
#include<stdio.h>              //链队列的基本操作,首先我们要知道队列是在队头进行删除,队尾进行插入 
#include<stdlib.h>
#include<malloc.h>
typedef struct Sq
{
int data; //数据域
struct Sq *next; //指针域
}Sq;
typedef struct
{
Sq *front; //指向队列的队头
Sq *rear; //指向对了的队尾
}Squeue;
/*到此,队列的数据结构类型定义完毕*/
void init_Squeue(Squeue *p) //队列的初始化
{
p->front=(Sq *)malloc(sizeof(Sq));
p->rear=p->front;
p->front->next=NULL;

}

void delete_Squeue(Squeue *p,int t) //出栈
{
Sq *e;
e=p->front->next;
while(t--)
{
p->front=e;
e=e->next;

}

}
void insert_Squeue(Squeue *p,int m) //入栈
{
while(m--)
{
Sq *t;
t=p->rear;
p->rear=(Sq *)malloc(sizeof(Sq));
t->next=p->rear;
scanf("%d",&p->rear->data);
//printf("%d ",p->rear->data);
}
p->rear->next=NULL;
}
int getlength(Squeue *p) //返回栈的长度
{
Sq *q;
int i;
if(p->front==NULL) return 0;
q=p->front->next;
for(i=0;q!=p->rear;q=q->next)
i++;
return i+1;

}
int is_empty(Squeue *p) //判断是否为空
{
if(p->front==p->rear) printf("队列为空!");
else printf("队列不为空!");
}
void printf_Squeue(Squeue *p)
{
printf("队列里面还有如下元素");
Sq *q;
q=p->front->next;
for(;q!=p->rear; q=q->next)
printf("%d ",q->data);
printf("%d\n",q->data);
}
int main(void)
{
void init_Squeue(Squeue *p);
void delete_Squeue(Squeue *p,int t);
void insert_Squeue(Squeue *p,int m);
int getlength(Squeue *p) ;
int is_empty(Squeue *p);
int n;
scanf("%d",&n);
while(n--)
{
int m,t,l;
Squeue y,*p;
p=&y;
printf("请输入要入队列元素个数"); printf("\n");
scanf("%d",&m);
init_Squeue(p);
insert_Squeue(p,m);
printf("请输入要出队列元素个数"); printf("\n");
scanf("%d",&t);
delete_Squeue(p,t);
l=getlength(p);
printf("如今队列的长度为:"); printf("\n");
printf("%d\n",l);
is_empty(p); printf("\n");
printf_Squeue(p);
printf("\n");printf("\n");
}
return 0;
}
<img src="http://img.blog.csdn.net/20160415192028976?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />