就跟标题写的一样。
堆栈
Stack.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype ;
typedef struct
{
int maxSize;
int loaded;
Elemtype *key;
}*Stack;
Stack StackBuild(int max);
void StackDestory(Stack s);
int isSFull(Stack s);
int isSEmpty(Stack s);
void Stackin(Stack s, Elemtype key);
Elemtype Stackout(Stack s);
Elemtype Peek(Stack s);
void StackClear(Stack s);
int StackSize(Stack s);
Stack.c
#include"Stack.h"
Stack StackBuild(int max)
{
Stack s = calloc(1,sizeof(Stack));
s->loaded = 0;
s->maxSize = max;
s->key = calloc(1, sizeof(int) * (max+1));
s->key[0] = INT_MAX;
return s;
}
void StackDestory(Stack s)
{
free(s->key);
free(s);
}
int isSFull(Stack s)
{
return s->maxSize == s->loaded ? 1 : 0;
}
int isSEmpty(Stack s)
{
return !s->loaded;
}
void Stackin(Stack s, Elemtype key)
{
if (isFull(s))
return;
s->key[++s->loaded] = key;
}
Elemtype Stackout(Stack s)
{
if (isEmpty(s))
return NULL;
return s->key[s->loaded--];
}
Elemtype Peek(Stack s)
{
if (isEmpty(s))
return;
return s->key[s->loaded];
}
void StackClear(Stack s)
{
s->loaded = 0;
}
int StackSize(Stack s)
{
return s->loaded;
}
队列
Queue.h
#pragma once
#include
#include
typedef int Elemtype ;
typedef struct
{
int maxSize;
int loaded;
int begin;
int end;
Elemtype *key;
}*Queue;
Queue QueueBuild(int max);
void QueueDestory(Queue q);
int isQFull(Queue q);
int isQEmpty(Queue q);
void Queuein(Queue q, Elemtype key);
Elemtype Queueout(Queue q);
void QueueClear(Queue q);
int QueueSize(Queue q);
Queue.c
#include"Queue.h"
Queue QueueBuild(int max)
{
Queue q = calloc(1,sizeof(Queue));
q->loaded = q->begin = q->end = 0;
q->maxSize = max;
q->key = calloc(1, sizeof(int) * (max+1));
return q;
}
void QueueDestory(Queue q)
{
free(q->key);
free(q);
}
int isQFull(Queue q)
{
return q->loaded == q->maxSize? 1:0;
}
int isQEmpty(Queue q)
{
return !q->loaded;
}
void Queuein(Queue q, Elemtype key)
{
if (isQFull(q))
return;
q->key[(q->begin++)%q->maxSize]=key;
q->loaded++;
}
Elemtype Queueout(Queue q)
{
if (isQEmpty(q))
return -INT_MAX;
q->loaded--;
return q->key[(q->end++)%q->maxSize];
}
void QueueClear(Queue s)
{
s->loaded = 0;
}
int QueueSize(Queue q)
{
return q->loaded;
}
二叉树(遍历和创建)
BinaryTree.h
#pragma once
#include
#include
typedef int ElemType;
typedef struct BinaryTreeNode// P.75
{
ElemType Data;
struct BinaryTreeNode *lChild, *rChild;
}BinaryTreeNode;
typedef BinaryTreeNode* BiTree, *TNode;
typedef struct BinaryTree// I made it, also shown in course slides
{
BinaryTreeNode *root;
}BinaryTree;
void PreOrderTransverse(BiTree t);
void InOrderTransverse(BiTree t);
void PostOrderTransverse(BiTree t);
BinaryTreeNode* PreCreateBt(BinaryTreeNode *t);
BinaryTree.c
/*
I don't have the copyright of these code.
*/
////////////////////////////////////////////////////////////////////////////////
// BinaryTree PreOrder/InOrder/PostOrder Traverse Demo Program
// Please note: This is a minimal functional traverse program
// that lacks most of the functions in ADT 5.2
// I will made another full version of BinaryTree program
#include "BinaryTree.h"
////////////////////////////////////////////////////////////////////////////////
// I don’t know why the author used “BiTree” here,
// so I made a typedef in Line 17, as below:
// typedef BinaryTreeNode* BiTree;
// Program 5.1-5.3
void PreOrderTransverse(BiTree t)
{
if(t == NULL)
return;
printf(“%c”, t->Data);
PreOrderTransverse(t->lChild);
PreOrderTransverse(t->rChild);
}
void InOrderTransverse(BiTree t)
{
if(t == NULL)
return;
InOrderTransverse(t->lChild);
printf(“%c”, t->Data);
InOrderTransverse(t->rChild);
}
void PostOrderTransverse(BiTree t)
{
if(t == NULL)
return;
PostOrderTransverse(t->lChild);
PostOrderTransverse(t->rChild);
printf(“%c”, t->Data);
}
////////////////////////////////////////////////////////////////////////////////
// Before traverse, you need to create a BinaryTree first
// Here we use PreOrder manner to create one
// In this function, you can input a string like ABEH###C#D##MN###
// Program 5.4
BinaryTreeNode* PreCreateBt(BinaryTreeNode *t)
{
char ch;
ch = getchar();
if(ch == ‘#’)
t = NULL;
else
{
t = (BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));
t->Data = ch;// A mistake in textbook
t->lChild = PreCreateBt(t->lChild);
t->rChild = PreCreateBt(t->rChild);
}
return t;
}