一、栈
满足先进后出,后进后出的数据结构
一.栈的定义
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;
}
总结
以上就是栈和队列的基本操作了,且代码皆为非指针类型。