欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > 数据结构(3)(顺序栈)

数据结构(3)(顺序栈)

2024/10/24 11:15:04 来源:https://blog.csdn.net/qq_54094530/article/details/140681707  浏览:    关键词:数据结构(3)(顺序栈)

 栈:

      栈是限定仅在栈顶进行插入和删除操作的线性表,在操作的时候,只允许栈顶改变不允许栈底改变,具有后进先出的特征。

顺序栈:

      顺序栈是一种使用数组实现的栈,也称为数组栈。其基本思路是通过数组来存储栈中的元素,并通过栈顶指针指示栈顶元素在数组中的位置。

     也就是说,相当于只能对最后一个元素进行增,删,查的数组。

基本操作:

#ifndef SEQSTACK_H
#define SEQSTACK_Htypedef struct{char name[32];char sex;int age;int score;
}DATATYPE;typedef struct
{DATATYPE* head;int tlen;int top;// clen
}SeqStack;SeqStack*CreateSeqStack(int size);  //创建
int DestroySeqStack(SeqStack*ss);  //销毁
int PushSeqStack(SeqStack*ss,DATATYPE*data);  //入栈
int PopSeqStack(SeqStack*ss);  //出栈
int IsEmptySeqStack(SeqStack*ss);  //判断栈是否为空
int IsFullSeqStack(SeqStack*ss);  //判断栈是否为满
int GetSizeSeqStack(SeqStack*ss);  //获取栈当前大小
DATATYPE*GetTopSeqStack(SeqStack*ss);  //获取栈顶元素
#endif // SEQSTACK_H

实现:

#include "seqstack.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
SeqStack *CreateSeqStack(int size)
{SeqStack* ss = ( SeqStack*)malloc(sizeof(SeqStack));if(NULL ==ss){perror("CreateSeqStack error malloc1");return NULL;}ss->head = ( DATATYPE*)malloc(sizeof(DATATYPE)*size);if(NULL ==ss->head){perror("CreateSeqStack error malloc2");return NULL;}ss->tlen = size;ss->top =  0;return ss;
}int PushSeqStack(SeqStack *ss, DATATYPE *data)
{if(NULL == ss ||NULL ==data){fprintf(stderr,"SeqStack or data  is null \n");return 1;}if(IsFullSeqStack(ss)){fprintf(stderr,"PushSeqStack full\n");return 1;}memcpy(&ss->head[ss->top],data,sizeof(DATATYPE));ss->top++;return 0;
}int PopSeqStack(SeqStack *ss)
{if(NULL == ss ){fprintf(stderr,"SeqStack  is null \n");return 1;}if(IsEmptySeqStack(ss)){fprintf(stderr,"PopSeqStack is empty \n");return 1;}ss->top--;return 0;
}int IsEmptySeqStack(SeqStack *ss)
{return 0 == ss->top;
}int IsFullSeqStack(SeqStack *ss)
{return ss->top == ss->tlen;
}DATATYPE *GetTopSeqStack(SeqStack *ss)
{if(IsEmptySeqStack(ss)){return NULL;}return &ss->head[ss->top-1];
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com