栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

栈 C语言

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

栈 C语言

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

栈的特殊之处在于:仅在表尾进行插入和删除操作的线性表。也就是先进后出,只有后入的数据出栈,之前的数据才能出栈。
空栈:不含任何数据元素的栈。
允许插入和删除的一端称为栈顶,另一端称为栈底。

 

总代码

#include 
#include 
 
#define STACK_MAX_SIZE 10
 

typedef struct CharStack {
    int top;
 
    int data[STACK_MAX_SIZE]; //The maximum length is fixed.
} *CharStackPtr;
 

void outputStack(CharStackPtr paraStack) {
    for (int i = 0; i <= paraStack->top; i ++) {
        printf("%c ", paraStack->data[i]);
    }// Of for i
    printf("rn");
}// Of outputStack
 

CharStackPtr charStackInit() {
	CharStackPtr resultPtr = (CharStackPtr)malloc(sizeof(CharStack));
	resultPtr->top = -1;
 
	return resultPtr;
}//Of charStackInit
 

void push(CharStackPtr paraStackPtr, int paraValue) {
    // Step 1. Space check.
    if (paraStackPtr->top >= STACK_MAX_SIZE - 1) {
        printf("Cannot push element: stack full.rn");
        return;
    }//Of if
 
    // Step 2. Update the top.
	paraStackPtr->top ++;
 
	// Step 3. Push element.
    paraStackPtr->data[paraStackPtr->top] = paraValue;
}// Of push
 

char pop(CharStackPtr paraStackPtr) {
    // Step 1. Space check.
    if (paraStackPtr->top < 0) {
        printf("Cannot pop element: stack empty.rn");
        return '';
    }//Of if
 
    // Step 2. Update the top.
	paraStackPtr->top --;
 
	// Step 3. Push element.
    return paraStackPtr->data[paraStackPtr->top + 1];
}// Of pop
 

void pushPopTest() {
    printf("---- pushPopTest begins. ----rn");
 
	// Initialize.
    CharStackPtr tempStack = charStackInit();
    printf("After initialization, the stack is: ");
	outputStack(tempStack);
 
	// Pop.
	for (char ch = 'a'; ch < 'm'; ch ++) {
		printf("Pushing %c.rn", ch);
		push(tempStack, ch);
		outputStack(tempStack);
	}//Of for i
 
	// Pop.
	for (int i = 0; i < 3; i ++) {
		ch = pop(tempStack);
		printf("Pop %c.rn", ch);
		outputStack(tempStack);
	}//Of for i
 
    printf("---- pushPopTest ends. ----rn");
}// Of pushPopTest
 

void main() {
	pushPopTest();
}// Of main

入栈

void  Push( T  x )
template 
void  seqStack::Push ( T  x)
{
     if (top==MAX_SIZE-1)  throw  “溢出”;
     top++;
     data[top]=x;
 } 

栈顶

T  GetTop(  )
template 
T  seqStack::GetTop ( )
{
     if (Empty()) throw  ”空栈” ;
     return data[top];
 } 

出栈

template  
T  seqStack:: Pop ( )
{
     if (top==-1)  throw  “溢出”; 
     x=data[top];
      top--;
     return  x;
 }

判断空栈

bool Empty( )
template 
bool  seqStack::Empty ()
{
     if (top==-1)  
         return true;
     return false;
 } 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/873006.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号