栈和队列的基本操作

一、栈

满足先进后出,后进后出的数据结构

一.栈的定义

typedef struct{
	elemtype data[maxsize];//elemtype自定义的整型类型
	int top;//栈顶
	int bottom;//栈底
}sqstack,*sqstackpoint;

二.栈的初始化

void initstack(sqstack &s){
	s.top=s.bottom=-1;
} 

三.空栈的判断

bool stackempty(sqstack s){
	if(s.top==-1) return ok;
	else return error;
}
} 

四.入栈

void push(sqstack &s,elemtype e){
	if(s.top==maxsize-1){
	printf("满栈");
	return;
	}
	else
	{
		s.top++;
		s.data[s.top]=e;
	}
}

五.出栈

void pop(sqstack &s,elemtype &e){
	if(s.top=-1) 
	{
		printf("栈空");
		return;
	}
	else
	{
		e=s.data[s.top];
		printf("%d",e);
		s.top--;
	}
}

六.输出栈顶数据

status gettop(sqstack s){
    if(s.top == -1)
    {
        return -1;
    }
	else
	{
        return s.data[s.top];
    }
}

七.输出栈内的数据

void printstack(sqstack &s){
    while(s.top != -1)
    {
        printf("%d ",s.data[s.top--]);
    }
}

八.完整代码展示

# include<stdio.h>
# include<bits/stdc++.h>
# define maxsize 50
# define error 0
# define ok 1
typedef int status;
typedef int elemtype;

typedef struct{
	elemtype data[maxsize];
	int top;
	int bottom;
}sqstack,*sqstackpoint;

void initstack(sqstack &s){
	s.top=s.bottom=-1;
} 

bool stackempty(sqstack s){
	if(s.top==-1) return ok;
	else return error;
}

void push(sqstack &s,elemtype e){
	if(s.top==maxsize-1){
	printf("满栈");
	return;
	}
	else
	{
		s.top++;
		s.data[s.top]=e;
	}
}

void pop(sqstack &s,elemtype &e){
	if(s.top=-1) 
	{
		printf("栈空");
		return;
		
	}
	else
	{
		e=s.data[s.top];
		printf("%d",e);
		s.top--;
	}
}

status gettop(sqstack s){
    if(s.top == -1){
        return -1;
    }
	else{
        return s.data[s.top];
    }
}
void printstack(sqstack &s){
    while(s.top != -1){
        printf("%d ",s.data[s.top--]);
    }
}

int main()
{
	sqstack s;
	int e;
	initstack(s);
	push(s,1);
	push(s,2);
	push(s,3);
	push(s,4);
	printf("%d\n",gettop(s));
	printstack(s);
	return 0; 
}

二、队列

满足先进先出,后进后出的数据结构;

一.队列的定义

typedef struct{
	elemtype data[maxsize];
	status front;//队首
	status rear;//队尾
}sqqueue;

二.队列的初始化

void initqueue(sqqueue &q){
	q.front=q.rear=-1;
}

三.判断队列的空否

bool queueempty(sqqueue &q)//判断队列是否为空 
{
	if(q.front=q.rear) return error;
	else return ok;
}

四.队列的长度

status queuelength(sqqueue &q)//队长 
{
	elemtype length;
	length=(q.rear-q.front + maxsize)%maxsize;//为了防止队列长度超出内存容量
	return length;
}

五.入列

void enqueue(sqqueue &q,elemtype e)//入列; 
{
	if((q.rear+1)%maxsize==q.front) return;
	else
	{
		q.rear=(++q.rear)%maxsize;
		q.data[q.rear]=e;	
	}
}

六.出列

void dequeue(sqqueue &q,elemtype e)//出列; 
{
	if(!queueempty(q)) return;
	else 
	{
		q.front=(q.front++)%maxsize;
		e=q.data[q.front];
	}
}

六.输出队列

void printqueue(sqqueue &q){
    while(q.front != q.rear){
        printf("%d ",q.data[q.rear--]);
    }
}

七.完整代码

# include<stdio.h>
# include<stdlib.h>
# define maxsize 50
# define error 0
# define ok 1
typedef int elemtype;
typedef int status;
typedef struct{
	elemtype data[maxsize];
	status front;
	status rear;
}sqqueue;

void initqueue(sqqueue &q){//初始化队列 
	q.front=q.rear=-1;
}

bool queueempty(sqqueue &q)//判断队列是否为空 
{
	if(q.front=q.rear) return error;
	else return ok;
}

status queuelength(sqqueue &q)//队长 
{
	elemtype length;
	length=(q.rear-q.front + maxsize)%maxsize;
	return length;
}

void enqueue(sqqueue &q,elemtype e)//入列; 
{
	if((q.rear+1)%maxsize==q.front) return;
	else
	{
		q.rear=(++q.rear)%maxsize;
		q.data[q.rear]=e;	
	}
}

void dequeue(sqqueue &q,elemtype e)//出列; 
{
	if(!queueempty(q)) return;
	else 
	{
		q.front=(q.front++)%maxsize;
		e=q.data[q.front];
	}
}

void printqueue(sqqueue &q){
    while(q.front != q.rear){
        printf("%d ",q.data[q.rear--]);
    }
}

int main()
{
	sqqueue q;
	elemtype length,e; 
	initqueue(q);
	enqueue(q,1); 
	enqueue(q,2); 
	enqueue(q,3); 
	enqueue(q,4); 
	printqueue(q);
	return 0;
 } 

总结

以上就是栈和队列的基本操作了,且代码皆为非指针类型。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值