11.24 学习笔记-今日打卡队列(链式和顺序表)
代码没有注重格式,只是能够实现基本的功能。
代码中很多多余的变量和书写,都是在调试过程中产生的,(本博客只是记录代码)
#include<stdio.h>
#include<stdlib.h>
typedef struct Qnode{
int data;
struct Qnode* next;
}node;
typedef struct Queuenode{
node* front;
node* rear;
int length;
}Queue;
Queue init(Queue p)
{
p.front=p.rear=(node *)malloc(sizeof(node));
if(p.front==NULL&&p.rear==NULL)
{
printf("初始化失败\n");
exit(0);
}
p.front->next=NULL;
return p;
}
Queue insert(Queue p)
{
int data;
node *q;
if(q==NULL)
{
printf("无内存了\n");
exit(0);
}
while(1)
{
printf("请输入要入队的元素(输入9999表示结束)\n");
scanf("%d",&data);
if(data!=9999)
{
q=(node*)malloc(sizeof(node));
q->next=p.rear->next;
p.rear->next=q;
q->data=data;
p.rear=q;
p.length++;
}
else
{
printf("入队结束\n");
break;
}
}
printf("\n当前队列中的%d个结点\n",p.length);
return p;
}
int empty(Queue p)
{
if(p.front==p.rear)
{
return 0;
}
else{
return 1;
}
}
Queue del(Queue p)
{
node *del;
if(empty(p)==0)
{
printf("队列为空,无法出队列\n");
return p;
}
else{
if(p.front->next==p.rear)
{
printf("\n出队的结点为%d-",p.rear->data);
free(p.rear);
p.rear=p.front;
p.front->next=NULL;
p.length--;
}
else{
del=p.front->next;
printf("\n出队的结点为%d-\n",del->data);
p.front->next=p.front->next->next;
free(del);
p.length--;
}
}
printf("当前的队列长度为%d\n",p.length);
return p;
}
void pri(Queue p)
{
if(empty(p)==0)
{
printf("队列为空,无法打印\n");
}
else{
p.front=p.front->next;
while(p.front!=NULL)
{
printf("%d->",p.front->data);
p.front=p.front->next;
}
}
}
int main()
{
Queue q,L;
q.front=q.rear=NULL;
q.length=0;
q=init(q);
q=insert(q);
pri(q);
del(q);
pri(q);
return 0;
}
#include<stdio.h>
#define MAXSIZE 100
typedef struct{
int data[MAXSIZE];
int rear,front;
}seq;
seq creat()
{
seq s;
int e;
s.rear=s.front=0;
while(1)
{
printf("请输入您想要入队的元素(输入9999结束):\n") ;
scanf("%d",&e);
if(e!=9999)
{
s.data[s.rear]=e;
s.rear++;
}
else
{
break;
}
}
return s;
}
void pri(seq s)
{
printf("当前队列中的元素为:\n");
while(s.data[s.front]!=NULL)
{
printf("%d",s.data[s.front]);
s.front++;
}
}
seq insert(seq s)
{
int e;
printf("请输入想要入队的元素:\n");
scanf("%d",&e);
printf("\n队尾在%d",s.rear);
if(s.rear!=MAXSIZE-1)
{
s.data[s.rear]=e;
printf("插入之后:%d",s.data[s.rear]);
}
else
{
printf("队列已经满了,不能在入队了\n");
}
return s;
}
seq del(seq s)
{
int x,m;
while(1)
{
printf("要从队头出元素吗(9999)\n");
scanf("%d",&m);
if(m==9999)
{ x=s.data[s.front];
s.data[s.front]=0;
s.front++;
printf("出队元素为:%d",x);
if(x==0)
{
printf("出队完毕\n");
break;
}
}
else
{
break;
}
}
return s;
}
int main(){
seq L,q,s;
L=creat();
pri(L);
q=insert(L);
pri(q);
s=del(q);
pri(s);
return 0;
}