赞
踩
题目如下所示
利用顺序表实现“先进后出”的堆栈
**提示:**定义结构体struct来定义堆栈;采用动态数组实现顺序表;定义函数实现堆栈中元素的压入和弹出,保证“先进后出”的实现
// 结构体 Stack
struct Stack{
int * List; // 用来存储元素的顺序表
int curNumber; // 用来存储当前元素的总个数
};
void iniStack(Stack * A); // 初始化堆栈
void clearStack(Stack * A); //清空堆栈
void push(Stack * A, ELEMENT obj); //将元素obj压入堆栈的栈顶
void pop(Stack * A); //将当前栈顶的元素弹出栈。要求:栈不为空
ELEMENT get_top(Stack * A); //返回当前栈顶的元素值。要求:栈不为空
int is_empty(Stack * A); //判断当前堆栈是否为空,空返回1,非空返回0
void display(Stack * A); //自顶向下显示堆栈中的元素
代码如下所示
#include<stdio.h> #include<stdlib.h> #define N 10 typedef int ELEMENT; typedef struct Stack{ int * List; // 用来存储元素的顺序表 int curNumber; // 用来存储当前元素的总个数 }Stack; void iniStack(Stack * A); // 初始化堆栈 int is_empty(Stack * A); //判断当前堆栈是否为空,空返回1,非空返回0 void clearStack(Stack * A); //清空堆栈 void push(Stack * A, ELEMENT obj); //将元素obj压入堆栈的栈顶 void pop(Stack * A); //将当前栈顶的元素弹出栈。要求:栈不为空 ELEMENT get_top(Stack * A); //返回当前栈顶的元素值。要求:栈不为空 void display(Stack * A); //自顶向下显示堆栈中的元素 int main(){ Stack * A = (Stack*)malloc(N*sizeof(Stack)); iniStack(A); int i,temp,n; printf("———————元素进栈———————\n"); printf("输入要进栈的元素数量(栈空间为10):"); scanf("%d", &n); while(n>N){ printf("已经超出栈空间容量,请重新输入:"); scanf("%d", &n); } printf("开始进栈:"); for(i=0; i<n; i++){ scanf("%d", &temp); push(A, temp); } printf("进栈结束"); printf("\n—————当前栈内元素———————\n"); display(A);//自顶向下显示堆栈中的元素 printf("\n——————————————————\n"); printf("输出当前栈顶的元素值并将其弹出栈,直到剩下两个元素\n"); while(!is_empty(A)){ if(A->curNumber < 2)break; printf("%d ", get_top(A)); pop(A); } printf("\n—————当前栈内元素———————\n"); display(A);//自顶向下显示堆栈中的元素 clearStack(A); free(A); return 0; } void iniStack(Stack *A){// 初始化堆栈 A->curNumber = -1; A->List = (int*)malloc(N*sizeof(int)); } void clearStack(Stack *A){//清空堆栈 free(A->List); } void push(Stack * A, ELEMENT obj){//将元素obj压入堆栈的栈顶 A->curNumber++; *((A->List)+A->curNumber)=obj; } void pop(Stack * A){//将当前栈顶的元素弹出栈。要求:栈不为空 if(!is_empty(A)) A->curNumber--; } ELEMENT get_top(Stack * A){//返回当前栈顶的元素值。要求:栈不为空 if(!is_empty(A)) return *(A->List+A->curNumber); } int is_empty(Stack * A){//判断当前堆栈是否为空,空返回1,非空返回0 if(A->curNumber>-1) return 0; else return 1; } void display(Stack * A){//自顶向下显示堆栈中的元素 int i; if(A->curNumber>-1){ for(i=A->curNumber;i>=0;i--){ printf("%d ",*(A->List+i)); } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。