顺序栈的插入和删除

基于数据结构(严蔚敏版)

目录

前言

一、栈是什么?

1.栈的定义:

二、顺序栈的插入和删除

1.顺序栈的结构体

2.顺序栈的初始化

3.顺序栈的创建

4.顺序栈的插入

5.顺序栈的删除

6.顺序栈的打印

7.主函数

8.完整代码

9.编译结果

总结

1.顺序栈的时间复杂度:O(1)

2.栈与线性表的区别与联系


前言

栈(Stack)是一种特殊的线性表,它所有的插入和删除都限制在表的同一端进行。

---------------------------------------------------------------------------------------------------------------------------------单链表的相关知识点:单链表的创建,插入,删除以及查找_Lookdrama的博客-CSDN博客链表是一种物理存储单元上非连续、非顺序的存储结构,由一系列结点组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。https://blog.csdn.net/Lookdrama/article/details/127466859?spm=1001.2014.3001.5501---------------------------------------------------------------------------------------------------------------------------------

哈夫曼树的相关知识点: 哈夫曼树的编码和解码_Lookdrama的博客-CSDN博客icon-default.png?t=M85Bhttps://blog.csdn.net/Lookdrama/article/details/127452822?spm=1001.2014.3001.5502


一、栈是什么?

1.栈的定义:

  栈(Stack)是一种特殊的线性表,它所有的插入和删除都限制在表的同一端进行。

  栈中允许进行插入、删除操作的一端叫做栈顶(Top),另一端则叫做栈底(Bottom)。当栈中没有元素时,称之为空栈。栈的插入运算通常称为压栈、进栈或入栈(Push),栈的删除运算通常称为弹栈或出栈(Pop)。示意图如下

                                   

   基本操作:入栈、出栈、获取栈顶元素、销毁、判空

二、顺序栈的插入和删除

1.顺序栈的结构体

/*顺序栈结构*/
typedef struct SqStack
{
	int data[MAXSIZE];
	int top;	/*用于栈顶指针*/
}SqStack; 

2.顺序栈的初始化

//初始化一个顺序栈
void Init_Stack(SqStack *S)
{
	S = (SqStack*)malloc(sizeof(SqStack));
	S->top = -1;    //可判断栈是否为空
}

3.顺序栈的创建

//顺序栈的创建
void createStack(SqStack *S)
{
	int num1;
	int e;	
	printf("请输入所需要进栈的个数\n"); 
	scanf("%d",&num1);
	printf("请输入栈中元素\n");
	while(num1!=0)
	{
		scanf("%d",&e);
		S->top++;
		S->data[S->top]=e;
		num1--;
	}
} 

4.顺序栈的插入

/*插入元素e为新的栈顶元素*/
void Push(SqStack *S,int e)
{
	if(S->top==MAXSIZE-1) //栈满
	{
		printf("栈已满,无法进行进栈操作\n");
	} 
	S->top++;		//栈顶指针增加一 
	S->data[S->top]=e;		//将新插入的元素赋值给栈顶元素 
}

5.顺序栈的删除

/*若栈不空,则删除S的栈顶元素,并用e来表示删除的元素的值*/
void pop(SqStack *S)
{
	if(S->top==-1)
	{
		printf("栈为空,无法进行出栈操作\n");
	}
	S->top--;
}

6.顺序栈的打印

/*打印栈*/
void printStack(SqStack *S)
{
	if(S->top==-1)
	{
		printf("栈为空,无法打印\n");
	}
	else
	{
		printf("该栈的内容为:");
		for(int i=1;i<=S->top;i++)
		{
			printf("%d ",S->data[i]);
		}	
	}
	printf("\n");
}

7.主函数

int main()
{
	SqStack S[MAXSIZE];
	Init_Stack(S);
	printf("顺序栈创建成功\n");
	createStack(S);	
	printStack(S);
	Push(S,3);
	printStack(S);
	pop(S);
	printStack(S);
	return 0;
}

8.完整代码

#include<stdio.h>
#include <stdlib.h>
#define MAXSIZE 100


/*顺序栈结构*/
typedef struct SqStack
{
	int data[MAXSIZE];
	int top;	/*用于栈顶指针*/
}SqStack; 


//初始化一个顺序栈
void Init_Stack(SqStack *S)
{
	S = (SqStack*)malloc(sizeof(SqStack));
	S->top = -1;
}


/*插入元素e为新的栈顶元素*/
void Push(SqStack *S,int e)
{
	if(S->top==MAXSIZE-1) //栈满
	{
		printf("栈已满,无法进行进栈操作\n");
	} 
	S->top++;		//栈顶指针增加一 
	S->data[S->top]=e;		//将新插入的元素赋值给栈顶元素 
}

/*若栈不空,则删除S的栈顶元素,并用e来表示删除的元素的值*/
void pop(SqStack *S)
{
	if(S->top==-1)
	{
		printf("栈为空,无法进行出栈操作\n");
	}
	S->top--;
}

/*打印栈*/
void printStack(SqStack *S)
{
	if(S->top==-1)
	{
		printf("栈为空,无法打印\n");
	}
	else
	{
		printf("该栈的内容为:");
		for(int i=1;i<=S->top;i++)
		{
			printf("%d ",S->data[i]);
		}	
	}
	printf("\n");
}

//顺序栈的创建
void createStack(SqStack *S)
{
	int num1;
	int e;	
	printf("请输入所需要进栈的个数\n"); 
	scanf("%d",&num1);
	printf("请输入栈中元素\n");
	while(num1!=0)
	{
		scanf("%d",&e);
		S->top++;
		S->data[S->top]=e;
		num1--;
	}
} 
 
int main()
{
	SqStack S[MAXSIZE];
	Init_Stack(S);
	printf("顺序栈创建成功\n");
	createStack(S);	
	printStack(S);
	Push(S,3);
	printStack(S);
	pop(S);
	printStack(S);
	return 0;
}

9.编译结果


总结

1.顺序栈的时间复杂度:O(1)

2.栈与线性表的区别与联系

(1)栈是特殊的线性表

(2)栈的插入与删除运算只能在栈顶进行,而线性表的插入和删除运算可在线性表中的任意位置进行

猜你喜欢

转载自blog.csdn.net/Lookdrama/article/details/127467432