堆疊的實現(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佇列
- Objective-C環境下的靜態陣列實現Object陣列
- 靜態動態陣列陣列
- 初探堆疊欺騙之靜態欺騙
- (js佇列,堆疊) (FIFO,LIFO)JS佇列
- 手動實現ArrayList動態陣列陣列
- [JAVA] Java 陣列、多維陣列,動態、靜態初始化,陣列JVM記憶體模型分析Java陣列JVM記憶體模型
- Solidity中函式返回值,靜態動態陣列Solid函式陣列
- 陣列排序的實現陣列排序
- Dll堆疊問題(Dll的靜態變數與全域性變數、vs的MT與MD)變數
- 動手編寫—動態陣列(Java實現)陣列Java
- Java陣列如何實現動態初始化Java陣列
- 手把手教你使用C語言實現堆疊資料結構演算法-兩種方式(連結串列+陣列)C語言資料結構演算法陣列
- thinkphp console 命令列列印錯誤呼叫堆疊PHP命令列
- [JVM工具(1)] 堆疊檢查利器jstat的使用JVMJS
- Visual Studio + Qt專案 陣列超界不會報錯。 堆疊 Cookie 檢測程式碼檢測到基於堆疊的緩衝區溢位。QT陣列Cookie
- JS 堆疊JS
- 平衡堆疊
- 堆疊圖
- <資料結構>靜態佇列基本功能實現資料結構佇列
- Rougamo、Fody 實現靜態AopGAM
- JS陣列去重的實現JS陣列
- NumPy迭代陣列的實現示例陣列
- 【matplotlib 實戰】--堆疊面積圖
- C++容器巢狀實現動態二維陣列C++巢狀陣列
- golang實現稀疏陣列Golang陣列
- 再探堆疊欺騙之動態欺騙
- Thrift的網路堆疊
- 陣列1陣列
- 2-7 陣列:動態陣列陣列
- 動態陣列陣列
- 二叉堆實現優先佇列佇列
- 堆和索引堆的python實現索引Python
- PHP 實現頁面靜態化PHP
- Java實現普通二維陣列和稀疏陣列的相互轉換Java陣列
- JS實現陣列去重JS陣列