1. 程式人生 > >棧操作包括入棧,出棧,清空棧,銷燬棧等

棧操作包括入棧,出棧,清空棧,銷燬棧等

#include<malloc.h>
#include<string.h>
#include<stdio.h>

#define OVERFLOW        -1
#define STACK_INIT_SIZE 10
#define STACKINCREMENT   2
#define OK               1
#define ERROR            0
#define TRUE             1
#define FALSE            0

typedef int SElemType;
typedef int Status; 



struct SqStack
{
	SElemType *base;
	SElemType *top;
	int stacksize;
};

Status InitStack(SqStack &S);
Status DestoryStack(SqStack &S);
Status ClearStack(SqStack &S);
Status StackEmpty(SqStack S);
int StackLength(SqStack S);
Status GetTop(SqStack S, SElemType &e);
Status Push(SqStack &S, SElemType e);
Status Pop(SqStack &S, SElemType &e);
Status StackTraverse(SqStack S, Status(*visit)());

Status InitStack(SqStack &S)
{
	S.base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
	if(!S.base) return OVERFLOW;
	S.top = S.base;
	S.stacksize = STACK_INIT_SIZE;
	return OK;
}

Status DestoryStack(SqStack &S)
{
	free(S.base);
	S.base = NULL;
	S.top = NULL;
	S.stacksize = 0;
	return OK;
}

Status ClearStack(SqStack &S)
{
	S.top = S.base;
	return OK;
}

Status StackEmpty(SqStack S)
{
	if(S.top == S.base)
		return TRUE;
	else
		return FALSE;
}

int StackLength(SqStack S)
{
	return S.top - S.base;
}

Status GetTop(SqStack S,SElemType &e)
{
	if(S.top == S.base) return ERROR;
	e = *(S.top -1);
	return OK;
}

Status Push(SqStack &S, SElemType e)
{
	if(S.top - S.base >= S.stacksize)
	{
		S.base = (SElemType *)realloc(S.base,(S.stacksize + STACKINCREMENT)*sizeof(SElemType));
		if(!S.base) return OVERFLOW;
		S.top = S.base + S.stacksize;
		S.stacksize += STACKINCREMENT; 
	}
	*S.top++ = e;
	return OK;
}

Status Pop(SqStack &S, SElemType &e)
{
	if(S.top == S.base) return ERROR;
	e = * --S.top;
	return OK;
}

Status StackTraverse(SqStack S, Status(* visit)(SElemType))
{
	while(S.top > S.base)
		visit(*S.base++);
	printf("\n");
	return OK;
}

Status visit(SElemType e)
{
	printf("%d ", e);
	return OK;
}

int main()
{
	SElemType j;
	SqStack s;
	SElemType e;

	if(InitStack(s) == OK)
		for(j = 1; j <= 12; j++)
		{
			Push(s,j);
		}
	printf("棧中的元素依次為:");
	StackTraverse(s,visit);
	Pop(s, e);
	printf("彈出的棧頂元素 e=%d\n", e);
	printf("棧空否:%d(1:是 0:否)\n", StackEmpty(s));
	GetTop(s, e);
	printf("棧頂元素 e=%d 棧的長度為%d\n", e, StackLength(s));
	ClearStack(s);
	printf("清棧後,棧空否:%d(1:空 0:否)\n",StackEmpty(s));
	DestoryStack(s);
	printf("銷燬棧後,s.top = %u s.base= %u s.stacksize=%d\n",s.top,s.base,s.stacksize);
	return 0;
}

執行結果如下:

相關推薦

操作包括銷燬

#include<malloc.h> #include<string.h> #include<stdio.h> #define OVERFLOW -1 #define STACK_INIT_SIZE 10 #define

劍指offer66題--Java實現c++實現和python實現 21.的壓、彈序列

題目描述 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列

劍指Offer-的壓、彈序列

span tac 比較 最終 urn color public turn i++ 題目: 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該

劍指offer: 的壓和彈序列

span boolean 結束 壓棧 輔助 == peek pty cnblogs 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序

劍指offer二十一之的壓、彈序列

img 完成 方法 [] 鏈接 span blog 分享 技術分享 一、題目   輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列

劍指Offer——的壓、彈序列

是否 blog color size cnblogs sta 例如 pop clas 題目描述: 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2

[劍指offer] 的壓、彈序列

pub lock 之前 pre div ret order 判斷 第一個 題目描述 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧

的壓、彈序列

pop desc ++ vector 所有 top log subject tle 題目描述   輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,

ACM_的壓、彈序列

put 表示 整數 back 是不是 urn vector 位置 main 棧的壓入、彈出序列 Time Limit: 2000/1000ms (Java/Others) Problem Description: 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判

劍指offer 22. 的壓、彈序列

原題 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個

的壓、彈序列 java

棧的壓入、彈出序列 java 題目描述 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能

【劍指Offer】21的壓、彈序列

題目描述 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列

[劍指offer] -- 22.的壓、彈序列

題目描述 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這

《劍指offer》系列 的壓、彈序列(Java)

連結 牛客:棧的壓入、彈出序列 題目描述 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,

劍指offer學習筆記(Python)--的壓、彈序列

題目描述 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列

劍指Offer - 的壓、彈序列(Java實現)

題目描述 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(

劍指Offer-31的壓、彈序列

題目: 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩

的壓和彈序列

輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出

《劍指offer》-- 的壓與彈序列

一、棧的壓入與彈出序列: 1、題目: 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。 假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順

劍指offer{面試題22:的壓、彈序列}

解題思路: 模擬堆疊操作的過程,將原數列依次壓棧,把棧頂元素與所給出棧佇列相比,如果相同則出棧,如果不同則繼續壓棧,直到原數列中所有數字壓棧完畢。最後,檢測棧中是否為空,若空,說明出棧佇列可由原數列進行棧操作得到。否則,說明出棧佇列不能由原數列進行棧操作得到。 import java.u