赞
踩
栈:是一种特殊的线性表,其只允许在其固定的一段进行插入或者删除元素等操作;进行插入或者删除的一段称为栈顶,另一端称为栈顶;
栈的特性:
先进先出
后进后出
1. 静态栈的构造(栈的容量不能改变)
2. 动态栈的构造(栈的容量可以改表)
//静态栈的构造就是定义一个静态的顺序表
typedef struct Stack {
int array[100];
int size;
} Stack;
//动态栈的构造
typedef int STDataType;
typedef struct Stack {
STDataType* _a;
int _top; // 栈顶
int _capacity; // 容量
}Stack;
void StackInit(Stack* s) {
s->size = 0;
}
void StackDestory(Stack* s){
s->size = 0;
}
//插入
void StackPush(Stack* s,int v) {
s->array[s->size++] = v;
}
void StackPop(Stack* s,int v) {
s->size--;
}
3.获取栈顶元素
/返回栈顶的数据,不需要删除栈顶的数据
int StsckTop(Stack* s) {
return s->array[s->size - 1];
}
4.获取栈内元素个数
//返回栈内数据个数
int StackSize(Stack* s) {
return s->size;
}
5.检查栈是否为空栈;(返回0表示空栈)
//返回栈内是否为空栈
//返回0:代表不是空;返回非0:表示为空
int StackEmpty(Stack* s) {
return !s->size;
}
//链表节点的结构体
typedef struct Node {
int value;
struct Node* next;
} Node;
//队列的构造
typedef struct Queue {
Node* head; //队头
Node* last; //队尾
} Queue;
//初始化
void QueueInit(Queue* q) {
q->head = q->last = NULL;
}
//队列的销毁
void QueueDestroy(Queue* q) {
Node *cur, *next;
for (cur = q->head; cur != NULL; cur = next) {
next = cur->next;
free(cur);
}
q->head = q->last = NULL;
}
void QueuePush(Queue* q,int v){
Node* node= (Node*)malloc(sizeof(Node));
node->value = v;
node->next = NULL;
if (q->head == NULL) {
q->head = node;
q->last = node;
}
else {
q->last->next = node;
q->last = node;
}
}
void QueuePop(Queue* q) {
Node* second = q->head->next;
free(q->head);
q->head = second;
//last也有可能需要变更
if (q->head == NULL) {
q->head == NULL;
}
}
//返回队列首元素
int QueueFront(Queue* q) {
return q->head->value;
}
int QueueSize(Queue* q) {
int size = 0;
for (Node* cur = q->head; cur != NULL; cur = cur->next) {
size++;
}
return size;
}
//判断队列是否为空
int QueueEmpty(Queue* q) {
if (q->head == NULL) {
return -1;
}
else {
return 0;
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。