链式队列模拟

用链表的形式好处就是没有空间不够用或者空间剩余太多的问题

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct Line {
	int data;//数据域
	struct Line* next;//指针域
}Line;
Line* createLine()//创建队列(队头)
{
	Line* front;
	if ((front = (Line*)malloc(sizeof(Line))) == NULL)
	{
		printf("内存分配失败");
		exit(1);//异常退出
	}
	front->next = NULL;
	return front;
}
Line* createNode(int data)//创建结点
{
	Line* newNode;
	if ((newNode = (Line*)malloc(sizeof(Line))) == NULL)
	{
		printf("内存分配失败");
		exit(1);//异常退出
	}
	newNode->data=data;
	newNode->next = NULL;
	return newNode;
}
void insertNodeByrear(Line* front,int data)//在队尾插入结点
{
	Line* rear=front;
	while (rear->next!=NULL)rear = rear->next;
	Line* newNode = createNode(data);
	rear->next = newNode;//rear=newNode;
}
void printLine(Line* front)//便历
{
	Line* rear = front;
	while (rear->next)rear = rear->next;
	Line* pMove = front->next;
	if (rear == front)
	{
		printf("队列为空");
		return;
	}
	else 
		while (pMove)
		{
			printf("%d\t", pMove->data);
			pMove=pMove->next;
		}
	printf("\n");
}
void deleteNodebyfront(Line* front)//从队头删除结点
{
	Line* rear = front;
	while (rear->next)rear = rear->next;
	Line* pMove = front->next;
	if (!pMove)
	{
		printf("队列已空,无法删除\n");
		return;
	}
	else
	{
		if (pMove == rear)
		{
			front->next = NULL;
			free(pMove);
		}
		else
		{
			front->next = pMove->next;
			free(pMove);
		}
	}
}
int main()
{
	Line* list = createLine();
	int choice;
menu:
	system("cls");
	printf("1、在队尾插入结点\n");
	printf("2、从队头删除结点\n");
	printf("3、便历\n");
	printf("4、退出\n");
	printf("请输入选项:");
	scanf_s("%d", &choice);
	switch (choice)
	{
	case 1:
		int data;
		printf("请输入你要插入的数据");
		scanf_s("%d", &data);
		insertNodeByrear(list, data);
		break;
	case 2:
		deleteNodebyfront(list);
		printf("操作完成\n");
		break;
	case 3:
		printLine(list);
		break;
	case 4:
		exit(0);
	default:
		printf("输入错误");
		break;
	}
	system("pause>nul");
	goto menu;
}

还是要注意scanf_s的使用环境

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值