一、栈
遵循先进后出的操作原则,栈可用数组实现,也可以用链表实现。采用链表的头插法,头部删除法来实现先进后出的效果。数据结构包括逻辑结构,存储结构和对数据的运算。
实现一个链栈
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int ElemType;
typedef struct tag{
ElemType m_ival;
struct tag* next;
}Node,*pNode;
typedef struct tagstack{
pNode phead;//栈顶指针
int size;//栈中的元素个数
}Stack,*pStack;
void init_stack(pStack s);
void pop(pStack s);
void push(pStack s,ElemType val);
ElemType top(pStack s);
int empty(pStack s);
int stack_size(pStack s);
int main(){
Stack s;
init_stack(&s);
push(&s,2);
push(&s,3);
}
//初始化栈
void init_stack(pStack s){
memset(s,0,sizeof(Stack));
}
//弹出元素
void pop(pStack s){
//判断栈是否为空
pNode pcur=s->phead;
if(!s->size){
printf("stack is empty\n")
return;
}
s->phead=s->phead->next;
s->size--;
free(pcur);
}
//压入元素
void push(pStack s,ElemType val){
pNode pnew=(pNode)calloc(1,sizeof(Node));
pnew->m_ival=val;
if(!s->phead){
//栈为空
s->phead=pnew;
}e