堆栈是一种只容许在表的一端(称为栈顶)进行插入和删除的线性表,而在表的另外一端(称为栈底)是不能进行操做的,也是线性表的一种特例。数组
堆栈的顺序存储是用数组来是实现的。为了表示栈,咱们须要一个栈顶指针top来指示栈顶位置。下面的代码实现了对顺序栈的相关操做。指针
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef struct { int data[MAXSIZE]; int top; //栈顶指针 }sqstack; sqstack *Sqstack_Create(); //建立堆栈 int Sqstack_GetTop(sqstack *q); //取得栈顶 int Sqstack_In(sqstack *q, int dat); //入栈 int Sqstack_Out(sqstack *q); //出栈 void Sqstack_SetNull(sqstack *q); //栈置空 int Sqstack_Empty(sqstack *q); //判断栈是否空 void ShowSqstack(sqstack *q); //输出显示堆栈 int main(atevoid) { sqstack *q; int choice; int ans, dat; printf("顺序栈操做练习:\n"); q = Sqstack_Create(); while(1) { printf("顺序栈相关操做:\n"); printf("1.取栈顶结点\n"); printf("2.入栈\n"); printf("3.出栈\n"); printf("4.输出显示栈\n"); printf("5.退出程序\n"); printf("作出选择:"); scanf("%d", &choice); switch(choice) { case 1: ans = Sqstack_GetTop(q); if(ans == -1) printf("取栈顶结点失败!\n"); else printf("栈顶结点为%d\n", ans); break; case 2: printf("输入你想入栈的数据:"); scanf("%d",&dat); ans = Sqstack_In(q, dat); if(!ans) printf("入栈失败\n"); else printf("入栈成功\n"); break; case 3: ans = Sqstack_Out(q); if(ans == -1) printf("出栈失败!\n"); else printf("出栈成功!\n"); break; case 4: ShowSqstack(q); break; case 5: return 0; break; default: printf("选择无效!\n"); break; } } return 1; } //置空栈 void Sqstack_SetNull(sqstack *q) { q->top = -1; //空栈时栈顶指针为-1 } //判断堆栈是否空 int Sqstack_Empty(sqstack *q) { if(q->top == -1) //堆栈栈顶为-1则为空 return 1; else return 0; } //堆栈建立 sqstack *Sqstack_Create() { sqstack *q; int num, i; q = (sqstack*)malloc(sizeof(sqstack)); Sqstack_SetNull(q); printf("输入想建立堆栈数据的个数:"); scanf("%d", &num); if(num>MAXSIZE-1) return NULL; printf("依次输入堆栈的数据:"); for(i=0;i<num;i++) { scanf("%d", &q->data[i]); q->top++; } return q; } //取得栈顶 int Sqstack_GetTop(sqstack *q) { if(Sqstack_Empty(q)) //先要判断是否为空栈 return -1; else return q->data[q->top]; } //入栈 int Sqstack_In(sqstack *q, int dat) { if(q->top == MAXSIZE-1) //先要判断堆栈是否已满 return 0; else { q->top += 1; q->data[q->top] = dat; return 1; } } //出栈 int Sqstack_Out(sqstack *q) { if(Sqstack_Empty(q)) //先要判断堆栈是否为空 return -1; else return q->data[q->top--]; } //输出显示堆栈 void ShowSqstack(sqstack *q) { int i; for(i=0; i<=q->top; i++) { printf("%d ", q->data[i]); } printf("\n"); }