栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

第三章 栈与队列

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第三章 栈与队列

栈与队列 栈 栈的顺序实现
#define MaxSize 10
typedef struct {
	ElemType data[MaxSize];
	int top;
} SqStack;

int InitStack(SqStack &S) {
	S.top = -1;
	return true;
}

int Push(SqStack &S, ElemType e) {
	if (S.top + 1 == MaxSize)
		return -1;
	S.data[++ top] = e;
	return 1;
}

int Pop(SqStack &S, ElemType &e) {
	if (S.top == -1)
		return -1;
	e = S.data[top --];
	return 1;
}
栈的链表实现
typedef struct {
	ElemType data;
	struct SNode *next;
} SNode, *LinkedStack;

int InitStack(LinkedStack S) {
	S = NULL; //推荐使用不带头节点的链表
}

int Push(LinkedStack S, ElemType e) {
	SNode *p = (SNode *) malloc(sizeof SNode);
	if (!p)
		return -1;
	p->data = e;
	p->next = S;
	S = p;
}
int Pop(LinkedStack &S, ElemType &e) {
	SNode *p = S;
	S = S->next;
	e = p->data;
	free(p);
}
队列 队列的顺序实现 定义top为当前要插入的位置
typedef struct {
	ElemType data[MaxSize];
	int top, rear;
} SqQueue;

int InitQueue(SqQueue &Q) {
	Q.top = Q.rear = 0;
}

int Empty(SqQueue &Q) {
	return Q.top == Q.rear;
}

int Full(SqQueue &Q) {
	//牺牲队头前面的那个位置
	return (Q.rear + 1) % MaxSize == Q.top;
}
int EnQueue(SqQueue &Q, ElemType e) {
	if (Full(Q))
		return -1;
	Q.data[Q.rear] = e;
	Q.rear = (Q.rear ++) % MaxSize;
	return 1;
}
int DeQueue(SqQueue &Q, ElemType &e) {
	if (Empty(Q))
		return -1;
	e = Q.data[Q.top];
	Q.top = (Q.top ++) % MaxSize;
	return 1;
}
定义size变量
typedef struct {
	ElemType data[MaxSize];
	int top, rear;
	int size;
} SqQueue;

int InitQueue(SqQueue &Q) {
	Q.top = Q.rear = Q.size = 0;
}

int Empty(SqQueue &Q) {
	return !Q.size;
}

int Full(SqQueue &Q) {
	return Q.size == MaxSize;
}

int EnQueue(SqQueue &Q, ElemType e) {
	if (Full(Q))
		return -1;
	Q.data[Q.rear] = e;
	Q.rear = (Q.rear ++) % MaxSize;
	Q.size ++;
	return 1;
}

int DeQueue(SqQueue &Q, ElemType &e) {
	if (Empty(Q))
		return -1;
	e = Q.data[Q.top];
	Q.top = (Q.top ++) % MaxSize;
	Q.size --;
	return 1;
}
定义tag变量
typedef struct {
	ElemType data[MaxSize];
	int top, rear;
	int tag;
} SqQueue;

int InitQueue(SqQueue &Q) {
	Q.top = Q.rear = Q.tag = 0;
}

int Empty(SqQueue &Q) {
	return Q.top == Q.rear && !Q.tag;
}

int Full(SqQueue &Q) {
	return Q.top == Q.rear && Q.tag;
}

int EnQueue(SqQueue &Q, ElemType e) {
	if (Full(Q))
		return -1;
	Q.data[Q.rear] = e;
	Q.rear = (Q.rear ++) % MaxSize;
	Q.tag = 1;
	return 1;
}

int DeQueue(SqQueue &Q, ElemType &e) {
	if (Empty(Q))
		return -1;
	e = Q.data[Q.top];
	Q.top = (Q.top ++) % MaxSize;
	Q.tag = 0;
	return 1;
}
定义top为当前栈顶
typedef struct {
	ElemType data[MaxSize];
	int top, rear;
} SqQueue;

int InitQueue(SqQueue &Q) {
	Q.top = 0, Q.rear = (-1 + MaxSize) % MaxSize;
}

int Empty(SqQueue &Q) {
	if (mode == 牺牲一个元素)
		return (Q.rear + 1) % MaxSize == Q.top;
	else if (mode == 定义size变量)
		return Q.size == 0;
	else 
		return (Q.rear + 1) % MaxSize == Q.top && !Q.tag;
}

int Full(SqQueue &Q) {
	if (mode == 牺牲一个元素)
		return (Q.rear + 2) % MaxSize == Q.top;
	else if (mode == 定义size变量)
		return Q.size == MaxSize;
	else 
		return (Q.rear + 1) % MaxSize == Q.top && Q.tag;
}

int EnQueue(SqQueue &Q, ElemType e) {
	if (Full(Q))
		return -1;
	Q.rear = (++ Q.rear) % MaxSize;
	Q.data[Q.rear] = e;
	if (mode == 定义size变量)
		Q.size ++;
	else if (mode == 定义tag变量)
		Q.tag = 1;
	return 1;
}

int DeQueue(SqQueue &Q, ElemType &e) {
	if (Empty(Q))
		return -1;
	e = Q.data[Q.top];
	Q.top = (Q.top ++) % MaxSize;
	if (mode == 定义size变量)
		size --;
	else if (mode == 定义tag变量)
		Q.tag = 0;
}

暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1015257.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号