C语言顺序栈
平凡的人1 人气:0今天说的是关于数据结构顺序栈的一些基本操作c语言实现。
顺序栈的定义
首先,我们先来简单了解一下顺序栈,前面线性表我们知道,根据顺序存储或者链式存储分为顺序表和单链表,同样的,根据存储方式的不同,我们把栈分为顺序存储的栈称为顺序栈,链式存储的栈称为链栈。我们要讲的就是顺序栈。实际上,有了前面线性表的一些知识后,关于栈的操作我们还是比较容易理解的。
顺序栈的理解
问题来了?我们怎么去定义呢?通常我们可以用一个数组和记录栈顶元素位置的变量组成,栈顶位置用整型变量Top记录当前栈顶元素的下标值。当Top==-1时,表示空栈。当top==MAXSIZE-1时,表示满栈。好了,下面开始实现顺序栈。
准备工作
1.宏定义及其重命名
#define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 20 /* 存储空间初始分配量 */ typedef int Status; typedef int SElemType; /* SElemType类型根据实际情况而定,这里假设为int */
2.结构体(顺序栈的表示方式)
/* 顺序栈结构 */ typedef struct { SElemType data[MAXSIZE]; int top; /* 用于栈顶指针 */ }SqStack;
具体实现
1.初始化
/* 构造一个空栈S */ Status InitStack(SqStack *S) { /* S.data=(SElemType *)malloc(MAXSIZE*sizeof(SElemType)); */ S->top=-1; return OK; }
2.清空
/* 把S置为空栈 */ Status ClearStack(SqStack *S) { S->top=-1; return OK; }
3.判断是否为空
/* 若栈S为空栈,则返回TRUE,否则返回FALSE */ Status StackEmpty(SqStack S) { if (S.top==-1) return TRUE; else return FALSE; }
4.求长度
/* 返回S的元素个数,即栈的长度 */ int StackLength(SqStack S) { return S.top+1; }
5.求栈顶元素
/* 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR */ Status GetTop(SqStack S, SElemType* e) { if (S.top == -1) { return ERROR; } else { *e = S.data[S.top]; return OK; } }
6.入栈(判断是否满了)
/* 插入元素e为新的栈顶元素 */ Status Push(SqStack* S, SElemType e) { if (S->top == MAXSIZE - 1) /* 栈满 */ { return ERROR; } S->top++; /* 栈顶指针增加一 */ S->data[S->top] = e; /* 将新插入元素赋值给栈顶空间 */ return OK; }
7.出栈(判断是否为空)
/* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */ Status Pop(SqStack* S, SElemType* e) { if (S->top == -1) return ERROR; *e = S->data[S->top]; /* 将要删除的栈顶元素赋值给e */ S->top--; /* 栈顶指针减一 */ return OK; }
8.遍历
/* 从栈底到栈顶依次对栈中每个元素显示 */ Status StackTraverse(SqStack S) { int i; i = 0; while (i <= S.top) { visit(S.data[i++]); } printf("\n"); return OK; } Status visit(SElemType c) { printf("%d ", c); return OK; }
主函数
int main() { int j; SqStack s; int e; if (InitStack(&s) == OK) for (j = 1; j <= 10; j++) Push(&s, j); printf("栈中元素依次为:"); StackTraverse(s); 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)); return 0; }
好啦,本次顺序栈的一些知识就结束了。
加载全部内容