ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

栈的顺序存储

2022-01-14 18:34:22  阅读:146  来源: 互联网

标签:SeqStack struct void stack seqStack myStack 顺序存储


一.初始化栈

二.入栈

三.出栈

四.获取栈顶元素

五.栈的大小

六.判断栈是否为空

七.销毁栈

contact.h (头文件)

#pragma once
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 1024
struct SStack
{
void*data[MAX]//数组
int m_Size//元素个数
};
typedef void*seqStack
//一.初始化栈
seqStack int_SeqStack();
//二.入栈
void push_SeqStack(seqStack stack,void * data);
//三.出栈
void pop_SeqStack(seqStack stack);
//四.获取栈顶元素
void *top_SeqStack(seqStack stack);
//五.栈的大小
int size_SeqStack(seqStack stack);
//六.判断栈是否为空
int isEmpty_SeqStack(seqStack stack);
 //七.销毁栈
void destroy_SeqStack(seqStack stack);

tset.c

#include"contact.h"


//测试
struct Person
{
char name[64];
int age;
};
void tset()
{
//准备数据
struct Person p1 ={"aaa",10};
struct Person p2 ={"bbb",20};
struct Person p3 ={"ccc",30};
struct Person p4 ={"ddd",40};
struct Person p5 ={"eee",50};

//初始化栈
seqStack stack =init_SeqStack();

//入栈
push_SeqStack(stack,&p1);
push_SeqStack(stack,&p2);
push_SeqStack(stack,&p3);
push_SeqStack(stack,&p4);
push_SeqStack(stack,&p5;
while(isEmpty_SeqStack(stack) ==0)//如果栈部位空 进行访问栈顶元素, 并且出栈
{
return Person*pTop= top_SeqStack(stack)//栈顶元素
printf("栈顶元素 姓名:%s 年龄:%d\n",pTop->name,pTop->age);

//出栈
pop_SeqStack(stack);
}

//栈的大小
int size = size_SeqStack(stack);
printf("栈的大小:%d\n",size);

//销毁栈
 destroy_SeqStack(stack);
}


int main()
{
tset()
system("pause");
return EXIT_SUCCESS;
}

contact.c(源文件)

#include"contact.h"

                                //一.初始化栈
seqStack int_SeqStack()
{
struct SStack* stack = malloc(sizeof(struct SStack));
if(stack ++NULL)
{
return NULL;
}
memset(stack->data,0,sizeof(void*)*MAX);
stack->m_Size=0;
}            
                                    //二.入栈
void push_SeqStack(seqStack stack,void * data)
{
if(NULL == stack)
{
return;
}
if(NULL==data)
{
return ;
}
//判断是否已经满栈
struct SStack*myStack = stack;
if(myStack->m_Size==MAX)
{
return;
}
myStack->data[myStack->m_Size]=data;//入栈,尾插
myStack->m_Size++;//更新数据大小
}
                                    //三.出栈
void pop_SeqStack(seqStack stack)
{
if(NULL== stack)
{
return ;
}
//如果是空栈 不执行出栈
struct SStack *myStack=stack;
if(myStack->m_Size<0)
{
return;
}
//执行出栈
myStack->data[myStack->m_Size-1]==NULL;
//更新栈的大小
myStack->m_Size--;
}
                                    //四.获取栈顶元素
void *top_SeqStack(seqStack stack)
{
if(NULL == stack)
{
return NULL;
}
struct SStack* myStack = stack;
//如果给我们的是空栈 返回NULL
if(myStack->m_Size == 0)
{
return NULL;
}
return myStack->data[myStack->m_Size-1]
}
                                    //五.栈的大小
int size_SeqStack(seqStack stack)
{
if(NULL==stack)
{
return -1;
}
struct SStack *myStack=stack;
re turn myStack->m_Size;
}
                                   //六.判断栈是否为空

int isEmpty_SeqStack(seqStack stack)
{
if(NULL == stack)
{
return 1;//真
}
struct SStack*myStack= stack;
if(myStack->m_Size<0)
{
return 1;//真
}
return 0;
}       
                                    //七.销毁栈
void destroy_SeqStack(seqStack stack)
{
if(NULL == stack)
{
return NULL;
}
free(stack);
stack=NULL;
}

标签:SeqStack,struct,void,stack,seqStack,myStack,顺序存储
来源: https://blog.csdn.net/weixin_66044522/article/details/122498732

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有