栈学习笔记2

//SeqStack.h
typedef struct stack
{
	DATA data[SIZE+1];  //数据元素 
	int top;  //栈顶 
}SeqStack;
SeqStack *SeqStackInit()
{
	SeqStack *p;
	if(p=(SeqStack *)(malloc)(sizeof(SeqStack)))  //申请栈内存 
	{
		p->top = 0; //设置栈顶为零 
		return p; //返回指向栈的指针 
	}
	return NULL;
}
int SeqStackIsEmpty(SeqStack *s) //判断栈是否为空 
{
	return(s->top==0);
}
void SeqStackFree(SeqStack *s)  //释放栈所占用空间
{
	if(s)
	free(s);
 } 
void SeqStackClera(SeqStack *s) // 清空栈
{
	s->top = 0;
 } 
int SeqStackFull(SeqStack *s)  //判断栈是否已满 
{
	return(s->top==SIZE) ;
}
int SeqStackPush(SeqStack *s, DATA data) // 入栈操作
{
	if((s->top+1)>SIZE)
	{
		printf("栈溢出!\n");
		return 0;
	}
	s->data[++s->top] = data; //栈元素入栈
	return 1; 
 } 
DATA SeqStackPop(SeqStack *s)  //出栈操作
{
	if(s->top==0)
	{
		printf("栈为空!");
		exit(0);
	}
	return (s->data[s->top--]);
}
DATA SeqStackPeek(SeqStack *s) // 读栈顶数据
{
	if(s->top==0)
	{
		printf("栈为空! ");
		exit(0);
	}
	return (s->data[s->top]);
 }
//SeqStackTest.h
#include<stdio.h>
#include<stdlib.h>
#define SIZE 50
typedef struct
{
	char name[15];
	int age;
}DATA;
#include "SeqStack.h"
int main()
{
	SeqStack *stack;
	DATA data,data1;
	stack=SeqStackInit(); //初始化栈
	printf("入栈操作:\n") ;
	printf("输入姓名 年龄进行入栈操作:");
	scanf("%s%d",data.name,data.age) ;
	SeqStackPush(stack,data);
	printf("输入姓名 年龄进行入栈操作:");
	scanf("%s%d",data.name,data.age);
	SeqStackPush(stack,data);
	printf("\n 出栈操作:\n按任意键进行出栈操作:");
	getch();

	data1=SeqStackPop(stack);
	printf("出栈的数据是(%s,%d)\n",data1.name,data1.age);
	printf("再按任意键进行出栈操作");
	getch() ;

	data1=SeqStackPop(stack);
	printf("出栈的数据是(%s,%d)\n",data1.name,data1.age);
	SeqStackFree(stack); //释放栈所占用的空间
	getch() ;
	return 0;
}
时间: 2024-08-03 09:07:42

栈学习笔记2的相关文章

数据结构 栈 学习笔记1

//SeqStack.h typedef struct stack { DATA data[SIZE+1];  //数据元素  int top;  //栈顶  }SeqStack; SeqStack *SeqStackInit() { SeqStack *p; if(p=(SeqStack *)(malloc)(sizeof(SeqStack)))  //申请栈内存  { p->top = 0; //设置栈顶为零  return p; //返回指向栈的指针  } return NULL; } i

栈学习笔记

栈 栈是特殊的链表,只能在表尾进行插入(push)和删除(pop),具有后进先出的特点(LIFO) 链表分为动态链表和表态链表.动态链表是根据需要给栈元素分配存储空间,而静态链表则是固定存储空间的. C++ STL(Standard Template Library, 即标准模板库) 定义了栈的基本操作, 需要包含<stack>头文件.示例代码如图1-1所示. #include <iostream> #include <stack> using namespace st

数据结构栈 学习笔记

栈是先进后出的数据结构. 下面直接上代码了.下面使用数据模仿栈式结构. // // main.cpp // StudyC++ // // Created by 杜甲 on 14-9-12. // Copyright (c) 2014年 杜甲. All rights reserved. // #include <iostream> //std::cout #include <stdio.h> using namespace std; #define MaxSize 10 int st

[原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessController的checkPerssiom方法,访问控制器AccessController的栈检查机制又遍历整个 PerssiomCollection来判断具体拥有什么权限一旦发现栈中一个权限不允许的时候抛出异常否则简单的返回,这个过程实际上比我的描述要复杂 得多,这里我只是简单的一句带过,因为这

[原创]java WEB学习笔记6:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

数据结构学习笔记之栈

栈(stack)  是限定仅在表尾进行插入或删除操作的线性表.因此,对栈来说,表尾端有其特殊含义,称为栈项(top),相应地,表头端称为栈底(bottom).不含元素的空表称为空栈. 栈有两种存储表示方法:顺序栈和链栈.顺序栈,即栈的顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置.通常的习惯做法是以top=0表示空栈,鉴于C语言中数组的下标约定从0开始,则当以C作描述语言时,如此设定会带来很大不便:另一方面,由于栈在使用过程

《数据结构与算法分析》学习笔记(四)——栈ADT

一.栈ADT是what? 1.定义 栈,是限制插入和删除都只能在一个位置上进行的表. 2.图示 3.栈的基本功能 (1)是否为空 (2)进栈 (3)出栈 (4)清空 (5)取栈顶 二.栈的链表实现 <数据结构与算法分析>学习笔记(四)--栈ADT

汇编入门学习笔记 (二)—— 寄存器(内存访问)、栈

疯狂的暑假学习之  汇编入门学习笔记 (二) 参考:<汇编语言> 王爽  第三章 一.寄存器(内存访问) 1.DS和[address] DS 数据段寄存器,用来存放数据段地址 [address] 用来表示数据段的偏移地址 同样跟CS一样,不可以通过 mov ds, 1000 给ds赋值 要通过通用寄存器ax等. 例如: mov ax, 1000 mov ds, ax mov al, [0] 把1000:0的内容存进al mov bx, 1000 mov ds, bx mov [0], al 把