链式栈基本操作C语言实现学习代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#define_CRT_SECURE_NO_WARNINGS
#include
#include
#define datatype int
struct stack1
{
int num;
datatype data;
struct stack1*pnext;
};
typedef struct stack1stack;
stack*init(stack*phead);//初始化
stack*push(stack*phead,int num,datatype data);//压栈stack*pop(stack*phead,stack*tnode);//出栈
stack*freeall(stack*phead);//清空
void printf1(stack*phead);//打印
源文件
#define_CRT_SECURE_NO_WARNINGS
#include
#include
#include"abc.h"
stack*init(stack*phead)
{
return NULL;
}
stack*push(stack*phead,int num,datatype data)
{
stack*p=(stack*)malloc(sizeof(stack));
p->num=num;
p->data=data;
p->pnext=NULL;
if(phead==NULL)
{
phead=p;
return phead;
}
else
{
stack*q=phead;
while(q->pnext!=NULL)
q=q->pnext;
}
q->pnext=p;
return phead;
}
}
void printf1(stack*phead)
{
if(phead==NULL)
{
return;
}
else
{
printf("本结点地址=%p,后一个结点地址=%p,结点编号=%d,结点数据=%d\n",phead,phead->pnext,phead->num,phead->data);
printf1(phead->pnext);
//printf("本结点地址=%p,后一个结点地址=%p,结点编号=%d,结点数据=%d\n", phead, phead->pnext, phead->num, phead->data);
}
}
stack*pop(stack*phead,stack*tnode)
{
if(phead==NULL)
{
return NULL;
}
else if(phead->pnext==NULL)
{
tnode->num=phead->num;
tnode->data=phead->data;
free(phead);
phead=NULL;
return phead;
}
else
{
stack*p=phead;
stack*q=phead->pnext;
while(q->pnext!=NULL)
{
p=q;
q=q->pnext;
}
p->pnext=NULL;
tnode->num=q->num;
tnode->data=q->data;
free(q);
return phead;
}
}
stack*freeall(stack*phead)
{
if(phead==NULL)
{
return NULL;
}
else
{
stack*p=phead;
stack*q=NULL;
while(p!=NULL)
{
q=p->pnext;
free(p);
p=q;
//q = q->pnext;
}
return NULL;
}
}
测试代码
#define_CRT_SECURE_NO_WARNINGS #include
#include
#include"abc.h"
void main()
{
stack*pp=NULL;
//init(pp);
//pp = push(pp, 1, 10);
//pp = push(pp, 2, 11);
//pp = push(pp, 3, 12);
//pp = push(pp, 4, 13);
//pp = push(pp, 5, 14);
//printf("入栈之后\n");
//printf1(pp);
//printf("出栈之后\n");
///*pp = freeall(pp);
//printf1(pp);*/
//while (pp != NULL)
//{
// stack *p = (stack *)malloc(sizeof(stack));
// pp = pop(pp, p);
// printf1(pp);
// printf("出栈的数据\n%d,%d\n", p->num, p->data);
//}
int num=10,i=0;
while(num)
{
i++;
pp=push(pp,i,num%2);
num=num/2;
}
printf1(pp);
system("pause");
}