C Language 栈和队列 - 顺序栈

Posted Adorable_Rocy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C Language 栈和队列 - 顺序栈相关的知识,希望对你有一定的参考价值。

通过线性表的顺序表和单链表结构后,栈和队列也属于线性表,只不过对于操作有所限制。

  • 创建顺序栈
struct SqStack {
	char data[MaxSize];
	int top;
};
  • 初始化顺序栈算法:
//初始化栈
void InitStack(struct SqStack *&s) {

	s = (SqStack *)malloc(sizeof(SqStack));
	s->top = -1;
}


补充:

  1. 栈满条件:s->top == MaxSize - 1
  2. 栈空条件:s->top == -1
  3. 元素e的进栈操作,先将top指针自增,再将新元素入队
  4. 元素e的出队操作,先将top指针指向的元素e取出,再将top指针自减1.
  • 插入元素算法:
//插入元素
void InsertElem(struct SqStack *&s , int index , char ch) {

	if(s->top == MaxSize - 1) {
		printf("溢出了");
	}
	if(index != -1) {
		s->top++;
		s->data[s->top] = ch;
	} else {
		char alphaments[5] = {'a','b','c','d','e'};

		while(s->top <= 5) {
			s->top++;
			s->data[s->top] = alphaments[s->top];
		}
	}
}

补充:这里插入元素分为默认插入和指定插入元素,index传入-1表示默认插入初始化元素,index传入0或者其他字符,即插入自己想插入的元素

  • 出栈算法:
void Pop(struct SqStack *&s , char &e) {
	e = s->data[s->top--];
}
  • 主函数:
main() {
	struct SqStack *S;
	//初始化栈
	InitStack(S);
	//判断是否为空
	EmptyOfStack(S);
	//插入元素 默认插入元素 
	InsertElem(S,-1,'\\0');
	//判断是否为空
	bool isEmpty = EmptyOfStack(S);
	//输出元素 
	printf("%d\\n",isEmpty);
	//输出栈元素
	PrintfStack(S);
	return 0;
}
  • 结果如下:

以上是关于C Language 栈和队列 - 顺序栈的主要内容,如果未能解决你的问题,请参考以下文章

C Language 栈和队列 - 链栈

c 语言数据结构栈和队列的相关操作

栈和队列

(王道408考研数据结构)第三章栈和队列-第二节:队列基本概念顺序栈和链栈基本操作

栈和队列

C 数据结构之栈和队列