c语言中如何取代队尾元素,数据结构C语言实现—-出队伍操作

1.创建一个队列时,空队列中队首和队尾相同,但不是NULL,队首后面挂的元素才是NULL

2.打印队列时,对于链队列,不能把指针加一来找到下一个数据,因为链表地址不连续,需要复制一条链表,不断往后遍历来挨个打印链表的数据

3.求队伍的长度也是,不能首尾指针相减,因为地址不连续,所以同样需要复制一条链表,通过遍历来求长度

代码如下:

#include

#include

/*************************************

* 出队列操作

* 队首(头指针)---元素1----元素2---元素3---.....

* 将队首指向元素2,释放掉元素1

* 注意1:队列原本为空队列,直接返回

* 注意2:释放掉第一个元素后,队列变为空队列,别忘了让队尾 = 队首

* ***************************************************************/

//typedef char ElemType;

typedef struct QNode

{

char date;

struct QNode *next;

}QNode , *QueuePtr;

typedef struct

{

QueuePtr front , rear;

}LinkQueue;

/

//创建一个队列

void initQueue(LinkQueue *q)

{

q->front = q->rear = (QueuePtr)malloc(sizeof(QNode));

if (!q->front)

{

exit(0);

}

q->front->next = NULL;//这时头结点后面连接的是NULL,但本身不是NULL

}

/

//入队列操作

void EnQueue(LinkQueue *q , char e)

{

QueuePtr p;

p = (QueuePtr)malloc(sizeof(QNode));

if (!q->front)

{

exit(0);

}

p->date = e;

p->next = NULL;

q->rear->next = p;

q->rear = p;

}

//出队列操作

void DeQueue(LinkQueue *q , char *e)

{

if (q->front == q->rear)//判断是否为空队列

{

return;

}

QueuePtr p;

p = q->front->next;

*e = p->date;

q->front->next = p->next;

if (q->rear == p)

{

q->front = q->rear;

}

free(p);

}

/

//计算队列长度

int LenLinkQueue(LinkQueue *q)

{

int len,i;

QueuePtr p = q->front->next;

for (i = 0; p!=NULL;i++)

{

p = p->next;

}

return i;

}

int main()

{

LinkQueue q;

char e;

//创建队列

initQueue(&q);

printf("队列创建中,请稍后...n队列创建成功!n");

//入队列操作

printf("请输入要插入队列的字符:");

while ((e = getchar())!= ‘n‘)

{

if (e!=‘n‘)

{

EnQueue(&q , e);

}

}

//打印队列

printf("插入成功,正在打印队列字符...n");

printf("当前队列为:");

int len = LenLinkQueue(&q);//队伍长度

QueuePtr p = q.front->next;//链表不同于顺序表,地址不连续,所以不能通过指针的增减来打印,需要复制一个链表遍历

for (size_t i = 0;i

{

printf("%c" , p->date);

p = p->next;

}

putchar(‘n‘);

//出队伍

printf("请输入需要几个元素从队首出队列:");

int n;

scanf("%d",&n);

while (n)

{

DeQueue(&q , &e);

printf("%c已从队首出队列n" ,e);

n--;

}

//打印队伍

printf("插入成功,正在打印队列字符...n");

printf("当前队列为:");

p = q.front->next;

for (size_t i = 0;i

{

printf("%c" , p->date);

p = p->next;

}

putchar(‘n‘);

return 0;

}

运行结果:

20200719180549474499.png

原文链接:https://www.cnblogs.com/jerryleesir/p/13339458.html

本文来自网络,不代表手讯网立场。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值