首页 > 代码库 > 数据结构之第三章之栈
数据结构之第三章之栈
栈和队列其实就是操作受限的队列。
1~~栈的特点:栈是限定仅在表的另一端(栈顶)进行插入,删除操作的线性表,是后进先出的线性表。
2~~顺序栈
(1)顺序栈的存储表示
typedef struct Node{ struct Node *base;//栈底指针,在栈构造之前和销毁之后,base的值为NULL struct Node *top;//这个是栈定指针,用以压栈的位置。 int size;//当前已分配的存储单元数,以元素为单位 }NODE,*PNODE;
(2) 压栈操作
int push(PNODE head,int e){//插入元素为e的新的栈顶元素 if(head.top-head.base>=head.size)//栈满,追加存储空间
{ head.base=(PNODE)malloc(sizeof(NODE)); if(head.base==NULL)//存储分配失败 exit(-1); head.top=head.base+head.size; head.size+=STACKINCREMENT; } *head.top++=e;//先传输据再移指针 return 1;}
(3)弹栈操作
int pop(PNODE head,int e){ //若栈不为空,则删除head的栈顶元素,用e返回其值 if(head.top==head.base) return 0; e=*--head.top;//先移指针再传数据 return 1;}
3~~链式栈
(1)链式栈的存储表示
typedef struct Lnode{ int data;//数据域 struct Lnode *next;//指针域}NODE,*PNODE;
指向表头的指针为栈定指针
(2) 压栈操作
int push(PNODE head,int e){ phead=(PNODE)malloc(sizeof(NODE)); p->data=http://www.mamicode.com/e; p->next=head.next; head.next=phead; }
(3) 弹栈操作
int pop(PNODE head,int e){ if(!head->next) return 0; phead=head->next; head->next=phead->next; e=phead->data; free(phead); return 1;}
数据结构之第三章之栈
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。