c 数据结构 ArrayStack 数组模拟堆栈
来源:互联网 发布:植物大战僵尸2mac版 编辑:程序博客网 时间:2024/05/22 15:00
#include<stdio.h>
#include<stdlib.h>
#define Max 20
struct ElementStruct{
int num;
char name;
};
typedef struct ElementStruct ElementClass ;
typedef ElementClass *Element ;
void copyElement(Element src,Element dest){
dest->num=src->num;
dest->name=src->name;
}
struct StackStruct{
Element eles ;
int top;
int maxSize;
};
typedef struct StackStruct StackClass;
typedef StackClass *Stack;
Stack createStack(int size){
Stack s ;
s =(Stack)malloc(sizeof(StackClass));
s->eles= (Element) malloc(size*sizeof(ElementClass));
s->maxSize=size;
s->top=-1;
return s;
}
int isEmpty(Stack s){
return s->top ==-1;
}
int sizeS(Stack s){
return (s->top)+1;
}
/*注意这里ele 传的是指针的地址*/
void push (Stack s ,Element* ele){
if (s->top==s->maxSize-1){
Element newE=(Element)malloc(s->maxSize*2*sizeof(ElementClass));
Element oldElement=s->eles;
Element newEp=newE;
//copy src->dest
int i=0;
for(i=0;i< (s->maxSize);i++){
copyElement(oldElement,newEp);
oldElement++;
newEp++;
}
//释放src 的内存
free(s->eles);
s->eles=newE;
s->maxSize=s->maxSize*2;
}
Element topE = (s->eles)+s->top+1;
copyElement(*ele,topE);
//只有是指针的地址,前面加* 表示指针所指向的Element指针类型,
//有一点绕,是因为Element 本身就是个指针类型,而Element* 则表示这个指针类型的地十
free(*ele);
*ele=NULL;
s->top++;
}
Element pop(Stack s ){
Element topE = (s->eles)+(s->top);
if (s->top==-1){
return NULL;
}
(s->top)--;
return topE;
}
int main(){
int i =0;
int size=10;
Stack s =createStack(10);
//看到,这里是e 的地址,而不是e
for(i=0;i<25;i++){
Element e = (Element) malloc(sizeof(ElementClass));
e->num=i;
push(s,&e);
}
Element it=s->eles;
for(i=0;i<sizeS(s);i++){
printf("%d,%d/n",i,it->num);
it++;
}
it=pop(s);
printf("%d/n",it->num);
return 0;
}
- c 数据结构 ArrayStack 数组模拟堆栈
- 用数组模拟堆栈
- 数组模拟堆栈
- 数据结构-堆栈-数组实现
- 数据结构---堆栈(C#)
- 数据结构:数组、链表、堆栈、队列
- c 数据结构 linkedStack 链表模拟堆栈 一个更具有通用型的例子
- C语言数据结构之堆栈
- 数据结构之堆栈模拟应用(算法3.1)
- LinkedList集合模拟堆栈,队列数据结构
- LinkedList模拟堆栈和队列数据结构
- c语言实现数据结构中的栈(数组模拟)
- 数据结构——ArrayStack和LinkedStack的实现
- 数据结构与算法——在一个数组中实现两个堆栈(C语言)
- Java数据结构之堆栈-使用数组实现堆栈
- java数据结构之堆栈思想(数组)
- 用动态数组实现堆栈数据结构
- 一个c#Framework模拟堆栈的程序
- 用户感受
- User experiences with HLS and AutoESL's AutoPilot
- .NET 4.0中的Parallel.For 和 Parallel.ForEach的用法
- Android的启动过程
- 大数据量处理专题
- c 数据结构 ArrayStack 数组模拟堆栈
- 刚申请的号
- 开张啦
- 缺页中断 解题
- 『TEATIME』《痛~》《TOON》游戏图片查看提取工具
- AS3 ToolTip鼠标提示类
- 为按钮添加事件的两种方法
- Struts2拦截器的使用
- Android中Log信息的输出方法