堆栈的两种实现形式:数组和链表
2010-07-16 01:05
295 查看
最近做一个图像处理项目,要对获取的种子点进行区域生成,想到了利用堆栈了实现,但是基本上忘光了,复习了一下,实现了堆栈的两种显示和一些常用的操作。堆栈可以用数组实现,缺点是数组实现会限制堆栈的大小,而链表实现不存在这种情况。
1.堆栈的数组实现
在该实现中,我采用了指针的数组,如果喜欢也可以直接用数组的形式。
2.链表的实现
在实现代码中其实data指针完全可以去掉,因为在这些代码中可以发现data完全没气作用,但是当初写的时候有,后来也就懒得去掉了。
1.堆栈的数组实现
#include<iostream> #define MAX_SIZE 3 struct Stack { int* data; int st; }; bool push(Stack* s,int x) { if(s->st<MAX_SIZE) { s->data[s->st++]=x; return true; } else return false; } int pop(Stack* s) { int popData=0; if(!s) return 0; if(s->st<0) return 0; return s->data[--s->st]; } bool isEmpty(Stack* s) { return s->st==0; } bool isFull(Stack* s) { return s->st==MAX_SIZE; }
在该实现中,我采用了指针的数组,如果喜欢也可以直接用数组的形式。
2.链表的实现
#include<iostream> struct Node { int x; int y; struct Node* next; }; typedef struct Node Item; struct Stack { int len; Item* top; Item* data; }; /* void initStack(Stack* pStack) { pStack=new Stack(); pStack->len=0; pStack->data=new Item(); pStack->top=pStack->data; } */ bool pop(Stack* p,Item& item) { if(p->len==0) return false; item.x=p->top->x; item.y=p->top->y; item.next=p->top->next; p->top=p->top->next; p->len--; return true; } bool isEmpty(Stack* pStack) { using namespace std; if(pStack->len==0) { cout<<"true"<<endl; return true; } else { cout<<"false"<<endl; return false; } } bool push(Stack* p,Item& item) { Item* pNewItem=new Item(); pNewItem->x=item.x; pNewItem->y=item.y; pNewItem->next=p->top; p->top=pNewItem; p->len++; return true; }
在实现代码中其实data指针完全可以去掉,因为在这些代码中可以发现data完全没气作用,但是当初写的时候有,后来也就懒得去掉了。
相关文章推荐
- 学习笔记之约瑟夫环的两种实现方法(数组&链表)
- Java的栈实现(数组、链表两种方式)
- C 语言堆栈的实现,数组版本,链表版本(大师级的代码值得细细品味。)
- 用数组和链表两种方式实现栈
- 数据结构学习---堆栈的动态数组实现及链表实现
- 队列的两种实现:数组和链表
- 数据结构学习---堆栈的动态数组实现及链表实现
- 邻接表的两种实现(链表和数组模拟)
- 基于数组和链表两种方式实现栈
- java实现栈(数组和链表两种实现方式)
- 递归求集合子集(两种方法实现(数组,链表))
- 分别用数组和链表实现堆栈(C语言版) - ahljjun的专栏 - 博客频道 - CSDN.NET
- 基于数组或链表的堆栈实现
- 数据结构与算法学习笔记——链表部分实现(数组形式)
- 数三退一 数组形式 非链表实现 P278_105
- HDU 1520 Anniversary party(树形DP 数组和结构体链表两种实现方式)
- 基于数组或链表的堆栈实现
- 分别用数组和链表实现堆栈(C语言版)
- 约瑟夫环问题的两种实现[链表+数组]
- SPFA的两种实现形式(二维数组与数组模拟邻接表)