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

发布时间 : 星期二 文章链式栈基本操作C语言实现学习代码更新完毕开始阅读61a623a0360cba1aa911da48

头文件

#define _CRT_SECURE_NO_WARNINGS #include #include #define datatype int struct stack1 {

int num;

datatype data;

struct stack1 *pnext; };

typedef struct stack1 stack;

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\

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\ } }

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\ 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\ //}

int num = 10, i = 0; while (num) {

i++;

pp = push(pp, i, num % 2); num = num / 2; }

printf1(pp); system(\);