链式栈基本操作C语言实现学习代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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");

}

相关文档
最新文档