数据结构论坛

首页 » 分类 » 问答 » 数据结构图解链表,用链表实现栈c语言版
TUhjnbcbe - 2024/8/14 16:56:00
北京中科白癜风医院平安医院 http://www.csjkc.com/yydt/m/1133.html

栈(stack)是限定仅在表尾进行插入或者删除的线性表。对于栈来说,表尾端称为栈顶(top),表头端称为栈低(bottom)。不含元素的空表称为空栈。因为栈限定在表尾进行插入或者删除,所以栈又被称为后进先出的线性表(简称LIFO:Lastin,Firstout.结构)。

用链表实现栈,仅仅限定在头指针和尾指针,可以将头指针作为栈低,尾指针作为栈顶,所以对栈的操作也就限定在尾指针。

这里可以给栈定义一系列基本操作:

SqStack*InitStack()//初始栈voidPop(SqStack*s,Elemtypedata)//入栈ElemtypePush(SqStack*s)//出栈voidDestory(SqStack*s)//销毁栈

以下述类型说明作为顺序栈的定义:

这里可以给栈定义一系列基本操作:

typedefintElemtype;typedefstructLNode{  structLNode*next;  Elemtypedata;}LNode;typedefstructSqStack{  LNode*head;  intlen;}SqStack;

这里我们为栈定义了一个结构体,存储了栈顶的指针,我们存储了栈的长度,栈顶的指针我们使用链表来实现,这样我们出栈或者入栈只要要对栈顶指针操作就可以。

接下来我们看对栈的初始化操作

SqStack*InitStack(){  SqStack*s=(SqStack*)calloc(1,sizeof(SqStack));  assert(s);  returns;}

那么,我们销毁一个栈时,我们不仅要判断栈是否为空,不为空时要把链表都清空,

接下来我们看对栈的初销毁操作

voidDestory(SqStack*s){  assert(s);  if(s-len!=0)  {    LNode*node=s-head;    while(1)    {      if(node==NULL)      {        break;      }      else{        LNode*d=node;        node=d-next;        free(d);      }    }  }  free(s);  }

1
查看完整版本: 数据结构图解链表,用链表实现栈c语言版