堆疊的實現(1)--靜態陣列
堆疊也可以說是一種特殊的線性表,只能在棧頂進行插入和刪除。
本文中的堆疊實現採用靜態陣列實現,缺點是編譯時確定了長度。優點是簡單,不易出錯。
這個是標頭檔案的宣告,每個函式的功能都有註釋。
#ifndef A_STACK_H
#define A_STACK_H
/*
** Interface for a stack module
*/
#define STACK_SIZE 100 /* Max # of values on the stack */
/*
** push
** Pushes a new value on the stack. The argument is the value
** to be pushed.
*/
void push( int value );
/*
** pop
** Pops a value off of the stack, discarding it.
*/
void pop( void );
/*
** top
** Returns the topmost value on the stack without changing the
** stack.
*/
int top( void );
/*
** is_empty
** Returns TRUE if the stack is empty, else FALSE.
*/
int is_empty( void );
/*
** is_full
** Returns TRUE if the stack is full, else FALSE.
*/
int is_full( void );
/*
**print
** print the data in the stack
*/
void print(void);
/*
**count
** count the data in the stack
*/
int count(void);
#endif
標頭檔案中宣告函式的實現
/*
** A stack implemented with a static array. The array size can
** be adjusted only by changing the #define and recompiling
** the module.
*/
#include "a_stack.h"
#include <assert.h>
#include <stdio.h>
/*
** The array that holds the values on the stack, and a pointer
** to the topmost value on the stack.
*/
static int stack[ STACK_SIZE ];
static int top_element = -1;
/*
** push
*/
void
push( int value )
{
assert( !is_full() );
top_element += 1;//top_element先加一,再賦值
stack[ top_element ] = value;
}
/*
** pop
*/
void
pop( void )
{
assert( !is_empty() );
top_element -= 1;
}
/*
** top
*/
int top( void )
{
assert( !is_empty() );
return stack[ top_element ];
}
/*
** is_empty
*/
int
is_empty( void )
{
return top_element == -1;
}
/*
** is_full
*/
int
is_full( void )
{
return top_element == STACK_SIZE - 1;
}
/*
**count
**
*/
int count(void)
{
return top_element+1;
}
/*
**print
**
*/
void print()
{
assert( !is_empty() );
int i;
for(i=0;i<count();i++)
{
printf(" %d-->%d ",i,stack[i]);
if((i+1)%5==0)
printf("\n");
}
}
實現函式的測試
#include "a_stack.h"
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
int i;
srand((unsigned int)time(NULL));
for(i=0;i<STACK_SIZE;i++)
push(rand()%100);
print();
for(i=0;i<10;i++)
pop();
print();
printf("top-->%d\n",top());
return 0;
}
相關文章
- 靜態佇列,迴圈陣列實現佇列陣列
- 6-1 在一個陣列中實現兩個堆疊 (20分)陣列
- Python實現堆疊與佇列Python佇列
- C 語言實現使用靜態陣列實現迴圈佇列陣列佇列
- 初探堆疊欺騙之靜態欺騙
- Objective-C環境下的靜態陣列實現Object陣列
- 圖的深度優先遍歷(堆疊實現和非堆疊實現)
- 陣列、連結串列、堆疊和佇列學習陣列佇列
- Python實現堆疊和佇列詳解Python佇列
- 圖的深度優先遍歷[非堆疊、堆疊實現]
- (js佇列,堆疊) (FIFO,LIFO)JS佇列
- 資料結構與演算法——在一個陣列中實現兩個堆疊(C語言)資料結構演算法陣列C語言
- 手動實現ArrayList動態陣列陣列
- [JAVA] Java 陣列、多維陣列,動態、靜態初始化,陣列JVM記憶體模型分析Java陣列JVM記憶體模型
- 資料結構筆記整理和思考--動態陣列和靜態陣列的領悟資料結構筆記陣列
- C 語言實現使用動態陣列實現迴圈佇列陣列佇列
- Photopile JS – 幫助你實現精緻的照片堆疊效果JS
- 陣列排序的實現陣列排序
- Dll堆疊問題(Dll的靜態變數與全域性變數、vs的MT與MD)變數
- Java陣列如何實現動態初始化Java陣列
- 動手編寫—動態陣列(Java實現)陣列Java
- Solidity中函式返回值,靜態動態陣列Solid函式陣列
- 手把手教你使用C語言實現堆疊資料結構演算法-兩種方式(連結串列+陣列)C語言資料結構演算法陣列
- JS 堆疊JS
- java堆疊Java
- 堆疊圖
- 平衡堆疊
- 堆疊的工作原理
- <資料結構>靜態佇列基本功能實現資料結構佇列
- Java經典例項:實現一個簡單堆疊Java
- 陣列1——求一個陣列的最大子陣列陣列
- 優先佇列的一種實現方式—堆佇列
- [JVM工具(1)] 堆疊檢查利器jstat的使用JVMJS
- Rougamo、Fody 實現靜態AopGAM
- 再探堆疊欺騙之動態欺騙
- Thrift的網路堆疊
- Visual Studio + Qt專案 陣列超界不會報錯。 堆疊 Cookie 檢測程式碼檢測到基於堆疊的緩衝區溢位。QT陣列Cookie
- C++容器巢狀實現動態二維陣列C++巢狀陣列