对于栈来说,使用顺序存储结构偏多,而对于队列,则是使用链式结构偏多,栈的概念在前一篇已经介绍了,这篇主要给一下链式的代码:
基本定义:
typedef int ElemType; //这里用int示例
typedef struct StackNode //节点的定义
{
ElemType data;
struct StackNode *next;
}StackNode,*LinkStackPtr;
typedef struct LinkStack //栈结构的定义
{
LinkStackPtr top;
int count;
}LinkStack;
三种基本操作:
int StackEmpty(LinkStack *S)
{
if(S->top==NULL) return 1;
else return 0;
}
void Push(LinkStack *S,ElemType e)
{
LinkStackPtr p=(LinkStackPtr)malloc(sizeof(StackNode));
p->data=e;
p->next=S->top;
S->top=p;
S->count++;
}
Status Pop(LinkStack *S,ElemType &e)
{
LinkStackPtr p;
if(StackEmpty(S)) return 0;
e=S->top->data;
p=S->top;
S->top=S->top->next;
free(p);
S->count--;
return 1;
}
关于栈的其他操作前面篇博客已经说得很清楚啦,因为顺序存储结构用的比较多,这里就不过多赘述了。