ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

列表的顺序表实现

2022-03-28 21:31:50  阅读:152  来源: 互联网

标签:顺序 实现 列表 int maxsize pqueue printf front rear


盼望着,盼望着

天气蛮好

列表

列表的顺序存储

姥姥写的空一个内存的队列,front指向队首前一位,rear指向队尾。

有意思的是打印时需要注意分类讨论:

  1. rear>front的情况,队列没有在内存中“腰斩”,正常打印即可。
  2. rear<front的情况,队列已经绕了一圈了,此时打印front到maxsize的部分,在从0打印到rear。
#include<stdio.h>
#include<stdlib.h>
#define maxsize 10
//队列只能存储maxsize-1个数据
typedef int position;
//rear指向队列尾,刚刚插入的元素
//front指向第一个元素的前一位
//front指向的内存永不存放有效数据 当front等于rear时队列为空
typedef struct {
	int* data;
	position front, rear;
}queue,*pqueue;

pqueue createqueue()
{
	pqueue Q = (pqueue)malloc(sizeof(queue));
	Q->data = (int*)malloc(maxsize * sizeof(int));
	Q->front = Q->rear = 0;
	return Q;
}

int isfull(pqueue Q)
{
	return ((Q->rear + 1) % maxsize == Q->front);
}

int isempty(pqueue Q)
{
	return (Q->front == Q->rear);
}

int addq(pqueue Q, int elem)
{
	if (isfull(Q))
	{
		printf("满了");
		return 0;
	}
	else
	{
		Q->rear = (Q->rear + 1) % maxsize;
		Q->data[Q->rear] = elem;
		return 1;
	}
}

int deleteq(pqueue Q)
{
	if (isempty(Q))
	{
		printf("空的");
		return 0;
	}
	else
	{
		Q->front = (Q->front + 1) % maxsize;
		return Q->data[Q->front];
	}
}

void print(pqueue Q)
{
	if (Q->rear > Q->front)
	{
		for (int i = Q->front + 1; i <= Q->rear; i++)
		{
			printf("%d ", Q->data[i]);
			if (i == Q->rear)printf("\n");
		}
	}
	else
	{
		for (int i = Q->front + 1; i < maxsize; i++)
		{
			printf("%d ", Q->data[i]);
		}
		for (int i = 0; i <= Q->rear; i++)
		{
			printf("%d ", Q->data[i]);
			if (i == Q->rear)printf("\n");
		}
	}
}

int main()
{
	pqueue Q = createqueue();
	for (int i = 0; i < maxsize-1; i++)
	{
		addq(Q, i);
	}
	print(Q);
	deleteq(Q);
	print(Q);
	deleteq(Q);
	print(Q);
	addq(Q, 9);
	print(Q);
}

列表的链式存储

摆了摆了明天再写

标签:顺序,实现,列表,int,maxsize,pqueue,printf,front,rear
来源: https://www.cnblogs.com/huigugu/p/16069211.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有