链式栈,用链表摸拟栈。
stack.h
#include<stdio.h>
#include<stdlib.h>struct LinkStack
{int id; //编号int data; //数值struct LinkStack *pNext;
};struct LinkStack *phead; //全局变量
typedef struct LinkStack node, *PNODE;PNODE push(PNODE phead, int id, int data); //进栈
PNODE pup(PNODE phead); //出栈
void showAll(PNODE phead); //显示所有栈的信息
PNODE clearStack(PNODE phead); //清空栈信息
#include"stack.h"PNODE push(PNODE phead, int id, int data) //进栈
{PNODE pnew = malloc(sizeof(node));pnew->data = data;pnew->id = id;pnew->pNext = NULL;if (phead == NULL){phead = pnew; }else{PNODE ptemp = phead;while (ptemp->pNext != NULL){ptemp = ptemp->pNext;}ptemp->pNext = pnew;}return phead;
}PNODE pup(PNODE phead) //出栈
{//出栈是从尾部出栈if (phead == NULL){return phead;}else if (phead->pNext == NULL) //只有一个节点时出栈{printf("%d %dn", phead->id, phead->data);phead = NULL; }else{PNODE p1 = phead;while (p1->pNext->pNext != NULL){p1 = p1->pNext; //循环到倒数第二个,这时 p1->pNext->pNext就指向最后一个}printf("%d %dn", p1->pNext->id, p1->pNext->data);//这时可以删除最后一个 即:p1->pNext->pNextfree(p1->pNext->pNext);p1->pNext = NULL;}return phead;
}void showAll(PNODE phead) //显示所进栈顺序
{if (phead == NULL){return;}else{while (phead != NULL){printf("%d %dn", phead->id, phead->data);phead = phead->pNext;}}
}PNODE clearStack(PNODE phead) //清空栈信息
{PNODE p1 = NULL;PNODE p2 = NULL;p1 = phead;if (phead == NULL){return phead;}else{while (p1->pNext != NULL){p2 = p1->pNext; //使用 p2 保存 p1 的值,这样就可以删除 p2p1->pNext = p2->pNext; //让p1->pNext 指向 p2 的下个节点,这样可以把链表连起来free(p2);}//最后删除头节点free(phead);phead = NULL;return phead;}
}
#include"stack.h"void to(int num)
{printf("num: %dn ", num);if (num == 0 ){return;}else{// 1: num /2 与 num /= 2 有什么区别?//to(m /= 2);//这儿是把 m/=2 的值当做参数传递给形参,而且改变了m的值在程序中。to(num / 2); //这儿是把 m/2 的值当做参数传递给形参。//如果是先把印,后调用这两种写法都没问题,而如果是先调用,后打印这样打印中使用的 m 值就不同了 //一个是 m ,一个是 m = m/2 (m 除以 2 )后的值,所以先调用后打印有区别。printf("%3d", num % 2); }
}void main()
{int i = 0;for (i = 0; i < 10; i++){phead = push(phead, i, 100 + i);}showAll(phead);//printf("nn");//while (phead != NULL)//{// phead = pup(phead);//}phead = clearStack(phead);printf("nn");while (phead != NULL){phead = pup(phead);}system("pause");
}void main1()
{to(10);system("pause");
}
本文发布于:2024-02-01 19:47:18,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170678803939029.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |