c语言模拟链表与栈

本文展示了如何使用C++实现顺序存储结构的栈(FILO)和队列(FIFO)操作,包括创建、销毁、清空、判断满与空、获取栈顶/队首元素、压入和弹出元素。代码中提供了详细的函数实现,适用于基础数据结构的学习和理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

队列:FIFO

栈:FILO

本文采用顺序式存储结构来模拟队列与栈的相关操作

具体代码见下

#include<bits/stdc++.h>
using namespace std;
typedef struct stack
{
	int top;
	int maxsize;
	int* element;
}Stack;
void Create(Stack* S, int msize)
{
	S->maxsize = msize;
	S->top = -1;
	S->element = (int*)malloc(sizeof(int) * msize);
}
void Destory(Stack* S)
{
	S->maxsize = -1;
	free(S->element);
	S->top = -1;
}
void Clear(Stack* S)
{
	S->top = -1;
}
int Isfull(Stack* S)
{
	return S->top == S->maxsize - 1;
}
int Isempty(Stack* S)
{
	return S->top == -1;
}
int Top(Stack* S)
{
	if (Isempty(S))return 0;
	return S->element[S->top];
}
int Push(Stack* S, int x)
{
	if (Isfull(S))
	{
		printf("empty!");
		return 0;
	}
	S->top++;
	S->element[S->top] = x;
	return 1;
}
int Pop(Stack* S)
{
	if (Isempty(S))
	{
		return 0;
	}
	S->top--;
	return 1;
}

/**手动分割qwq**/
typedef struct queue 
{
	int front, tail;
	int size;
	int* element;
}Queue;
void Create(Queue* S, int msize)
{
	S->front = 1;
	S->tail = 0;
	S->size = msize;
	S->element = (int*)malloc(sizeof(int) * msize);
}
void Destory(Queue* S)
{
	S->size = -1;
	free(S->element);
	S->front = 0;
	S->tail = 0;
}
void Clear(Queue* S)
{
	S->front =0;
	S->tail = 0;
}
int Isfull(Queue* S)
{
	return (S->tail - S->front) == S->size;
}
int Isempty(Queue* S)
{
	return S->front==(S->tail+1);
}
int Front(Queue* S)
{
	if (Isempty(S))return 0;
	return S->element[S->front];
}
int Push(Queue* S, int x)
{
	if (Isfull(S))
	{
		printf("full!");
		exit(0);
		return 0;
	}
	S->tail++;
	S->element[S->tail] = x;
	return 1;
}
int Pop(Queue* S)
{
	if (Isempty(S))
	{
		return 0;
	}
	S->front++;
	return 1;
}
int main()
{
	Stack s;
	Stack* p;
	p = &s;
	Queue q;
	Queue* pp;
	pp = &q;
	Create(p,20);
	Create(pp, 20);
	int x;
	while (cin >> x)
	{
		if (x == 0)break;
		if (x > 0)Push(p, x);
		else Push(pp, x);
		
	}
	while (Top(p))
	{
		cout << Top(p) <<" ";
		Pop(p);
	}
	cout << endl;
	while (Front(pp))
	{
		cout << Front(pp) << " ";
		Pop(pp);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流浪小林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值