</pre><pre name="code" class="cpp"><pre name="code" class="cpp"># include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
typedef struct NODE // 创建结点的结构体
{
int data;
struct NODE *next;
}node,*pnode;
typedef struct STRACK //创建头指针和尾指针的结构体
{
pnode ptop;
pnode pbottom;
}stack,*pstack;
void traverse(pstack ps); //遍历栈输出
void init(pstack ps); // 建立头指针和尾指针
void push(pstack ps,int val); //压栈
void clear(pstack ps); //释放栈
void pop(pstack ps,int * val); //栈顶元素出栈 (出栈)
int main (void)
{
int val;
pstack ps;
ps = (pstack)malloc(sizeof(stack)); //为头指针和尾指针分配空间
init(ps);
push(ps,1);
push(ps,2);
push(ps,3);
traverse(ps);
pop(ps,&val);
traverse(ps);
pop(ps,&val);
traverse(ps);
clear(ps);
traverse(ps);
return 0;
}
void init(pstack ps)
{
pnode ptr;
ptr = (pnode)malloc(sizeof(node));
ptr = ps->ptop;
ps->pbottom = ps->ptop; //将头指针和尾指针初始化
ps->ptop->next = NULL;
}
void push(pstack ps,int val)
{
pnode ptr;
ptr = (pnode)malloc(sizeof(node)); //为结点分配空间
ptr->data = val; //将目标元素存入结点
ptr->next = ps->ptop; //指向上一节点
ps->ptop = ptr; //将头指针上移
}
void clear(pstack ps)
{
pnode p,q;
p = ps->ptop; //将p指向头结点
q = NULL;
while(p != ps->pbottom) //遍历栈
{
q = p->next; //将q指向上一节点
free(p); //释放p
p = q;
}
ps->ptop = ps->pbottom; //将头指针初始化
}
void pop(pstack ps,int * val)
{
pnode ptr;
ptr = ps->ptop; //将ptr指向头指针
*val = ptr->data; //指针*val指向ptr中的元素
ps->ptop = ptr->next; //将头指针下移
free(ptr); //释放ptr结点
ptr=NULL;
}
void traverse(pstack ps)
{
pnode ptr;
ptr = ps->ptop; //将ptr指向头指针
while(ptr != ps->pbottom) //遍历栈
{
printf ("%d ",ptr->data); //输出栈中元素
ptr = ptr->next; //指向上一结点
}
printf ("\n");
}
栈-链表的实现
最新推荐文章于 2022-05-09 22:07:43 发布