OJ之栈的基本使用
来源:互联网 发布:自行车大全软件 编辑:程序博客网 时间:2024/06/07 00:20
``` c#include <stdlib.h>#include <string.h>#include <stdio.h>#include "oj.h"#define stackLength 50struct std_stack{int top; //栈中元素个数,同时给出最高点位置void * data[stackLength]; //栈数据,data作为指针,每个地址存放的是放入数据的地址};Stack* stack_create(){//First: initialize the strcture of stack and get AddressStack * stack = (Stack*)malloc(sizeof(Stack));stack->top = 0;for(int i=0; i<stackLength; i++)stack->data[i] = NULL;return stack;}void stack_distory(Stack* self, void (*free_object)(void* object)){if(self==NULL) return;if(free_object==NULL) return;for(int i=0; i<self->top; i++){if(self->data[i]!=NULL){for(int j=i+1; j<self->top; j++){if(self->data[i]== self->data[j])self->data[j] = NULL;}free_object(self->data[i]);}}free_object(self);return;}void stack_clear(Stack* self){if(self==NULL) return;//从栈顶指针开始pop元素while(!stack_empty(self)){stack_pop(self);}return;}void stack_push(Stack* self, void* data){//首先判断栈指针是否越界,即栈大小是否合理if(self == NULL) return;if(data == NULL)return;self->data[self->top] = data;self->top++;return;}void* stack_pop(Stack* self){//if stack is nullif(self==NULL) return NULL;//First: judge the top element existif(self->top == 0)return NULL;else{void * result = self->data[self->top-1];self->top--;self->data[self->top] = NULL;return result;}return NULL;}void* stack_peek(Stack* self){//judge stack whether nullif(self==NULL)return NULL;//judge whether exists top objectif(self->top == 0)return NULL;else{return self->data[self->top-1];}return NULL;}boolean stack_empty(Stack* self){if(self==NULL) return true;if(self->top !=0 )return false;elsereturn true;}int stack_search(Stack* self, void* data, boolean (*match)(void* data)){if(self == NULL ) return -1;if(data == NULL && match == NULL) return -1;if(match == NULL) {int pos = 0;for(int i=0; i<self->top; i++){if(0 == strcmp((char*)(self->data[i]),(char *)(data))){pos = (self->top - i);}}/*while(!stack_empty(self)){pos++;char* data1 = (char *)stack_peek(self);if(0==strcmp(data1,(char*)data))return pos;stack_pop(self);}*/if(pos == 0) return -1;else return pos;}else{int pos = 0;//if(data == NULL) return -1;for(int i=0; i<self->top; i++){if(match(self->data[i])){pos = (self->top - i);}}if(pos == 0) return -1;else return pos;}return -1;}```
# 栈的基本使用
此题关键点如下:
- **定义一个栈的基本结构体**
- **理解stack_search的功能**
- **对传入参数要做空值判断**
-------------------
## 代码如下
0 0
- OJ之栈的基本使用
- OJ 系列之字符串基本操作
- OJ 系列之【中级】双链表基本操作
- 栈的基本使用
- OJ的使用
- Subsonic的使用之基本语法、操作
- IOS开发之UIView的基本使用
- android之Animation的基本使用
- 51之串口的基本使用
- Shader之LightingModel的基本使用
- STL之set的基本使用
- STL之map的基本使用
- javaweb基本组件之servlet的使用
- javaweb基本组件之filter的使用
- javaweb基本组件之listener的使用
- HandlerBar之each的基本使用
- HandlBarz之this的基本使用
- 初学JAVA之基本语句的使用
- 海哥看源码-Activity
- jmeter 压力测试各种值的意思 --吞吐量 样本
- Java中的null是个什么东西?
- RelativeLayout的子控件的布局属性
- scrapy xpath提取标签
- OJ之栈的基本使用
- java动态编程-Rhino脚本引擎
- 【Socket编程】篇四之并发服务器
- 使用json文件为当前类文件属性赋值(org.nutz.json.Json)
- 关于服务端技术如何学
- * { Box-sizing: Border-box } FTW
- 二、观察者模式--小伟带你学设计模式
- [疯狂Java]集合:专门用于聚集操作的一次性集合——Stream(流)
- Generic Xcode Archive 解决方案