栈和队列的基本操作

本文介绍了栈和队列这两种基本数据结构的概念,包括它们的特点和操作。栈遵循后进先出(LIFO)原则,常用操作有初始化、销毁、入栈、出栈、求栈顶元素、判断栈是否为空等。队列则遵循先进先出(FIFO)原则,主要操作有初始化、销毁、入队、出队、求队头和队尾元素、判断队列是否为空。文章还详细说明了栈和队列的代码实现,包括结构体定义、相关操作函数以及测试代码。
摘要由CSDN通过智能技术生成

目录

1.栈

1.栈的概念介绍

 2.代码实现

1. 头文件及结构体

2. StackInit(初始化)

3. StackDestroy(销毁)

4. StackPush(入栈)

5. StackPop(出栈)

6. StackTop(求栈顶)

7. int StackSize(栈大小)

8. StackEmpty(判空)

9. test.c

3. 整体代码实现

2. 队列

1. 队列的概念介绍

2. 队列的简单操作

1.头文件及结构体

2. QueueInit(初始化)

3. QueueDestroy(销毁)

4. QueuePush(入队列)

5. QueuePop(出队列)

6. QueueFront(求队头元素)

7. QueueBack(求队尾元素)

8. QueueSize(求队列的大小)

9. QueueEmpty(判空)

10. test.c

3. 代码实现


1.栈

1.栈的概念介绍

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。


 栈遵循着先进后出,后进先出的原则。


 栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。

 2.代码实现


1. 头文件及结构体

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>

typedef int STDataType;

typedef struct Stack
{
	STDataType* a;
	int capacity;
	int top;
}ST;

顺序表来实现需要大小size和容量capacity。


2. StackInit(初始化)

Stack.h

void StackInit(ST* ps);

Stack.c

void StackInit(ST* ps)
{
	assert(ps);
	ps->a = NULL;
	ps->capacity = 0;
	ps->top = 0;
}

初始化将所有的值置为空值,指针指向NULL.


3. StackDestroy(销毁)

Stack.h

void StackDestroy(ST* ps);

Stack.c

void StackDestroy(ST* ps)
{
	assert(ps);
	free(ps->a);
	ps->a = NULL;
	ps->capacity = ps->top = 0;
}

 


4. StackPush(入栈)

Stack.h

void StackPush(ST* ps, STDataType x);

 Stack.c

void StackPush(ST* ps, STDataType x)
{
	assert(ps);
	if (ps->top == ps->capacity)
	{
		int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
		STDataType* tmp = realloc(ps->a, sizeof(STDataType) * newcapacity);
		if (tmp == NULL)
		{
			printf("realloc failed\n");
			exit(-1);
		}
		ps->a = tmp;
		ps->capacity = newcapacity;
	}
    //以上内容是数据结构的扩容,在前面的线性表也由相似的操作
	ps->a[ps->top] = x;
	ps->top++;
}

 


5. StackPop(出栈)

Stack.h

void StackPop(ST* ps);

Stack.c 

void StackPop(ST* ps)
{
	assert(ps);
	assert(!StackEmpty(ps));//断言栈是否为空
	ps->top--;
}

 


6. StackTop(求栈顶)

Stack.h

STDataType StackTop(ST* ps);

 Stack.c

STDataType StackTop(ST* ps)
{
	assert(ps);
	assert(!StackEmpty(ps));
	return ps->a[ps->top - 1];//返回值是top-1,因为数组元素下标相差一
}

 


7. int StackSize(栈大小)

Stack.h

int StackSize(ST* ps);

Stack.c 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值