数据结构--顺序栈
/*
* 構造一個順序棧(當輸入9999時,結束入棧操作),輸出棧中元素,顯示棧頂元素,刪除棧頂元素
*/
#include <stdio.h>
#include <stack>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define OK 1
#define ERROR 0
typedef int SElemType;
//順序棧結構體
struct SqStack
{int *base;//指向棧底的指針int *top;//指向棧頂元素下一個位置的指針int stacksize;//棧的大小
};
//1.初始化順序棧
int InitStrack(SqStack &S){S.base = new SElemType[STACK_INIT_SIZE];//為順序棧動態分配內存 if(!S.base){ //分配失敗 exit(1); //退出程序,參數0表示正常退出,非0表示異常退出 }S.top = S.base; //top初始為base,表示空棧 S.stacksize = STACK_INIT_SIZE; //棧的最大容量 return OK;
}
//2.入棧
int Push(SqStack &S,SElemType e){if(S.top - S.base == S.stacksize){ //表示棧滿,增加空間 int *newbase; //指針用于指向新生成的空間位置 newbase=new int[S.stacksize*2]; //重新開辟一個空間 if(newbase==0) return 0; //內存分配失敗,返回0 for (int i=0;i<=S.stacksize-1;i++){ //將原有棧中的元素拷貝到新棧中 newbase[i]=S.base[i];} delete S.base; //刪除原有棧的空間 S.base=newbase; //原有棧的棧底指針指向新棧空間 S.top=&S.base[S.stacksize]; //新棧棧頂元素的下一個位置 S.stacksize *=2;}//*S.top++ = e; //元素壓入棧中,指針S.top加加 *S.top=e;S.top++;return OK;
}
//3.出棧
int Pop(SqStack &S){if(S.top == S.base){printf("空棧!"); return ERROR;}--S.top;return OK;
}
//4.取棧頂元素
SElemType GetTop(SqStack S){if(S.top != S.base){return *(S.top - 1);}return 00;
}
//5.打印,輸出
void Print(SqStack S)
{//打印棧中元素,順序是從棧底到棧頂int *p=S.base;while (p<S.top){printf("%d ",*p);p++;}printf("\n");
}
//主函數
int main(void){SqStack S;int x,y;InitStrack(S);printf("Enter Numbers:\n");while(true){scanf("%d",&x);if(x == 9999){break;}Push(S,x); //構造順序棧 } printf("The stack elems:");Print(S);printf("1.入棧:");scanf("%d",&x);Push(S,x);printf("The stack elems:");Print(S); y = GetTop(S);printf("2.取得棧頂元素:%d\n",y);printf("3.出棧:\n");Pop(S);printf("The stack elems:");Print(S);}
轉載于:https://www.cnblogs.com/tengpengfei/p/10454028.html
總結
- 上一篇: 单身二十年
- 下一篇: 【bzoj2850】巧克力王国 KD-