用链队列实现L=(10,20,30,40,50)的入队、出队、获取对头元素操作的算法
时间: 2024-05-01 22:21:41 浏览: 85
好的,这里是链队列实现L=(10,20,30,40,50)的入队、出队、获取队头元素的算法。
首先定义链队列的结构体:
```c
typedef struct Node{
int data;
struct Node *next;
}Node;
typedef struct{
Node *front,*rear;
}LinkQueue;
```
然后初始化链队列:
```c
void InitQueue(LinkQueue *LQ){
LQ->front=LQ->rear=(Node*)malloc(sizeof(Node));
LQ->front->next=NULL;
}
```
接下来是入队操作,将元素插入队尾:
```c
void EnQueue(LinkQueue *LQ,int x){
Node *s=(Node*)malloc(sizeof(Node));
s->data=x;
s->next=NULL;
LQ->rear->next=s;
LQ->rear=s;
}
```
出队操作即删除队头元素:
```c
int DeQueue(LinkQueue *LQ){
if(LQ->front==LQ->rear) return -1; //队列为空
Node *p=LQ->front->next;
int x=p->data;
LQ->front->next=p->next;
if(LQ->rear==p) LQ->rear=LQ->front; //如果队列只有一个元素,删除后队列为空,需要将rear指向front
free(p);
return x;
}
```
获取队头元素:
```c
int GetHead(LinkQueue LQ){
if(LQ.front==LQ.rear) return -1; //队列为空
return LQ.front->next->data;
}
```
最后可以测试一下:
```c
int main(){
LinkQueue LQ;
InitQueue(&LQ);
EnQueue(&LQ,10);
EnQueue(&LQ,20);
EnQueue(&LQ,30);
EnQueue(&LQ,40);
EnQueue(&LQ,50);
printf("队头元素为:%d\n",GetHead(LQ));
printf("出队元素为:%d\n",DeQueue(&LQ));
printf("队头元素为:%d\n",GetHead(LQ));
return 0;
}
```
输出结果为:
```
队头元素为:10
出队元素为:10
队头元素为:20
```
阅读全文