# 数据结构之----栈（堆栈），队列，堆

1.栈

（1）栈的一些常用操作

tack InitStack() {
Stack S = (Stack)malloc(sizeof(struct Node));//构造一个空栈
if (S == NULL) {
printf(“failed\n”);
return NULL;
}
S->next = NULL;
return S;
}

void DestoryStack(Stack &S) {
if (S != NULL) {
makeEmpty(S);
ptrToNode ptr = S;
free(ptr);
S = NULL;
}
}

void DestoryStack(Stack &S) {
if (S != NULL) {
makeEmpty(S);
ptrToNode ptr = S;
free(ptr);
S = NULL;
}
}

void push(Stack S, Element e) {
if (S != NULL) {
ptrToNode ptr = (ptrToNode)malloc(sizeof(struct Node));
ptr->data = e;
ptr->next = S->next;
S->next = ptr;
}
else {
}
}

void pop(Stack S) {
if (S == NULL) {
return;
}
if (!isEmpty(S)) {
ptrToNode ptr = S->next;//将栈下一个元素提取出来
S->next = ptr->next;//将下下一个元素的值赋给下一个元素
free(ptr);
}
else {
printf(“the stack is empty”);
}
}

Element top(Stack S) {
if (S == NULL) {
printf(“create stack\n”);
return NULL;
}
if (!isEmpty(S))
{
return S->next->data;
}
return 0;
}

int StackLength(Stack S) {
//ptrToNode ptr;
Stack a = S;
int i=0;
if (S == NULL) {
return 0;
}
while (a->next != NULL) {
i++;
a = a->next;
}
return i;
}

//stack.h
#pragma once
struct Node;
typedef struct Node *ptrToNode;
typedef struct Node *Stack;
typedef int Element;
struct Node {
Element data;//添加栈的数据
ptrToNode next;//指向栈下一节点
};
//创建栈
ptrToNode InitStack();
//计算栈的长度
int StackLength(Stack S);
//判断栈是否为空
int isEmpty(Stack S);
//出栈
void pop(Stack S);
//入栈
void push(Stack S, Element e);
//清空栈
void makeEmpty(Stack S);
//返回栈顶元素
Element top(Stack S);
//销毁栈
void DestoryStack(Stack &S);

//测试代码
#include<stdio.h>
#include<stdlib.h>
#include “stack.h”
int main() {
Stack S = InitStack();
push(S, 5);
push(S, 3);
push(S, 0);
push(S, 4);
push(S, 9);
printf(“栈元素长：%d个\n”, StackLength(S));
for (int i = 0; i < 5; i++) {
printf(“返回第：%d个栈顶元素：%d\n”,i+1,top(S));
pop(S);
}
DestoryStack(S);
system(“pause”);
return 0;
}

2.队列

0xCDCDCDCD - Created but not initialised 未初始化的堆内存

0xDDDDDDDD - Deleted 引用的内存已经/对象被删除

0xFEEEFEEE - Freed memory set by NT’s heap manager

0xCCCCCCCC - Uninitialized locals in VC6 when you compile w/ /GZ 未初始化的栈内存

0xABABABAB- Memory following a block allocated by LocalAlloc()

3.堆

（1）堆中某个节点的值总是不大于或不小于其父节点的值；
（2）堆总是一棵完全二叉树。

• 点赞
• 评论
• 分享
x

海报分享

扫一扫，分享海报

• 收藏
• 手机看

分享到微信朋友圈

x

扫一扫，手机阅读

• 打赏

打赏

Schrodinger's Ali

你的鼓励将是我创作的最大动力

C币 余额
2C币 4C币 6C币 10C币 20C币 50C币
• 一键三连

点赞Mark关注该博主, 随时了解TA的最新博文
09-11
07-22 3045

10-15 3666
04-04 1806
10-14 8333
04-09 502
03-29 228
09-15 574
11-29 108