考研数据结构目录
1、顺序表(链表操作)
1、堆栈与队列
后续将持续更新~
前言:此章节讲的是堆栈的基本操作和代码实现模板,有些指针top要定义好究竟代表的是什么意思,不然容易晕到后面
其次栈的出栈和取栈对top的操作这些都要注意 ,我的注释都写的很详细,以便大家可以观看理解
本章节目录
归纳基础要点和操作(强推荐)
二、堆栈用链表实现 (适当看)
一、堆栈用顺序表实现
归纳基础要点和操作
- 对top的定义:作为栈顶的标记(其实就是代表指针的意思),它指的是栈顶元素的上一个位置,例如栈顶元素在索引位置是i,那么top就是i+1
- 对于压栈操作:判满——>压栈——>top指针向上移动一位
- 对于出栈操作:判空——>top向下移动一位——>取数并且返回
#include<stdio.h>
//变量说明
int MAX=5;//MAX:全局变量,用来指明栈的最大空间 (判栈满的时候需要)
//top:它指向栈顶的"上一个元素"
//stack:数组模拟栈
//x:要压入的栈顶元素
void push(int stack[],int top,int x){
if(top==MAX){
printf("栈已满,入栈成功!");
}else{
stack[top]=x;//先填数据
top++;//指针再往上移动一位
}
}
int pop(int stack[],int top){
if(top==0){
printf("栈已空,出栈失败!");
}
top--;//栈顶指针往下移动一位
return stack[top];//把数据返回
}
int getPop(int stack[],int top){
if(top==0){
printf("栈空,无数据可取出!");
}
//注意 这里的top不做任何改动,只是起到取值作用
return stack[top-1];//要记住top永远指的是栈顶的上一个元素
}
int main(){
}
二、堆栈用链表实现
注意:对堆栈的一些基本操作,用链表实现,top指向的是链表的第一个结点,对于压栈,我们不需要判满,但是对于出栈,我们需要判空。
1、压栈操作
//注意:所有的压栈都是从链表的头部插入新节点
void push(NODE* top, int x){
NODE * s;//要压入的头结点
s=(NODE*)malloc(sizeof(NODE));
s->data=x;
s->next=top->next;//连接
top->next=s;
}
2、出栈操作
NODE * pop(NODE* top){
NODE * s;//要取出的头结点
if(top==NULL){
printf("栈空,取栈失败!");
return NULL;
}
s=top;// s为第一个结点
top=s->next;//之后的top孤立第一个节点
return s;
}
3、完整代码
#include<stdio.h>
typedef struct node{
int data;
struct node *next;
}NODE;
//注意:所有的压栈都是从链表的头部插入新节点
// 所有的出栈都是从栈表的头部取出第一个节点
void push(NODE* top, int x){
NODE * s;//要压入的头结点
s=(NODE*)malloc(sizeof(NODE));
s->data=x;
s->next=top->next;//连接
top->next=s;
}
NODE * pop(NODE* top){
NODE * s;//要取出的头结点
if(top==NULL){
printf("栈空,取栈失败!");
return NULL;
}
s=top;// s为第一个结点
top=s->next;//之后的top孤立第一个节点
return s;
}
int main(){
}