栈和队列的基本算法。

今天我学习了一些有关栈和队列的基本算法,拿出来和大家分享一下。

首先我们要知道他们的定义:

(1)栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。不含任何元素的栈称为空栈,栈又称为后进先出的线性表。

(2)队列:只允许在一端进行插入数据操作,在另一端进行删除操作的特殊线性表。插入的叫队尾,删除的叫队头,对列具有先进先出的特性。

#pragma once
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<Windows.h>
//1. 利用顺序表实现栈 

//函数接口: 
typedef int SDataType; 

typedef struct Stack { 
	SDataType array[100]; 
	int top; 
} Stack; 

// 初始化 
void StackInit(Stack *pStack)
{
	assert(pStack);
	pStack->top=0;
}

// 压栈 
void StackPush(Stack *pStack, SDataType data)
{
	assert(pStack);
	assert(pStack->top<100);
	pStack->array[pStack->top++]=data;
}

// 出栈 
void StackPop(Stack *pStack)
{
	assert(pStack);
	assert(pStack->top>0);
	pStack->top--;
}

// 返回栈顶元素 
SDataType StackTop(Stack *pStack)
{
	assert(pStack);
	assert(pStack->top>0);

	return pStack->array[pStack->top-1];
}


// 判断是否为空 
// 1 空 
// 0 不空 
int StackIsEmpty(Stack *pStack)
{
	return pStack->top==0?1:0;
}

// 返回数据个数 
int StackSize(Stack *pStack)
{
	return pStack->top;
}


//2. 利用单链表实现队列 

//函数接口: 

typedef int QDataType; 

typedef struct QNode { 
	QDataType data; 
	struct QNode *pNext; 
} QNode; 

typedef struct Queue { 
	QNode *pFront; 
	QNode *pRear; 
	int size; 
} Queue; 

// 初始化 
void QueueInit(Queue *pQueue)
{
	assert(pQueue);
	pQueue->pFront=pQueue->pRear=NULL;
	pQueue->size=0;
}

// 入队列 
void QueuePush(Queue *pQueue, QDataType data)
{
	QNode *p=(QNode *)malloc(sizeof(QNode));
	assert(pQueue);
	pQueue->size++;
	p->data=data;
	p->pNext=NULL;
	if(pQueue->pRear==NULL){
		pQueue->pFront=pQueue->pRear=p;
	}

	pQueue->pRear->pNext=p;
	pQueue->pRear=p;
}


	
// 出队列 
void QueuePop(Queue *pQueue)
{
	QNode *m;
	assert(pQueue);
	pQueue->size--;
	m=pQueue->pFront;
	if (pQueue->pFront == NULL) {
		pQueue->pRear = NULL;
	}
	pQueue->pFront=m->pNext;
	free(m);
}


// 返回队首元素 
QDataType QueueFront(Queue *pQueue)
{
	assert(pQueue);
	return pQueue->pFront->data;
}

// 判断是否为空 
// 1 空 
// 0 不空 
int QueueIsEmpty(Queue *pQueue)
{
	assert(pQueue);
	return pQueue->size==0?1:0;
}

// 返回数据个数 
int QueueSize(Queue *pQueue)
{
	assert(pQueue);
	return pQueue->size;
}
以上就是栈和队列的基本算法,下次再给大家介绍一些经典的面试题做一做吧。

猜你喜欢

转载自blog.csdn.net/ymk1507050118/article/details/80911710