链式栈(c)
来源:互联网 发布:会计核算软件子系统 编辑:程序博客网 时间:2024/05/21 12:33
/////////////////// .c //////
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdlib.h>
#include <string>
#include "stackNode.h"
StackNode *init(StackNode *phead)//初始哈
{
return phead;
}
StackNode *push(StackNode *phead, int num, datatype data)//压站
{
StackNode *pnewNode = (StackNode*)malloc(sizeof(StackNode));
pnewNode->num = num;
pnewNode->data = data;
pnewNode->pNext = NULL;
if (phead == NULL)
{
phead = pnewNode;
}
else
{
StackNode *p = phead;
while (p->pNext!=NULL)
{
p = p->pNext;
}
p->pNext = pnewNode;
}
return phead;
}
StackNode *pop(StackNode *phead, StackNode *poutdata)//出栈
{
if (phead ==NULL)
{
return NULL;
}
else if (phead->pNext == NULL)
{
poutdata->num = phead->num;
poutdata->data = phead->data; //取出数据
free(phead);
phead = NULL;
return phead;
}
else
{
StackNode *p = phead;
while (p->pNext->pNext != NULL)
{
p = p->pNext;//循环到倒数第二个节点
}
poutdata->num = p->pNext->num;//取出数据
poutdata->data = p->pNext->data;
free(p->pNext);
p->pNext = NULL;
return phead;
}
//return phead;
}
StackNode *freeall(StackNode *phead)//清楚数据
{
/**
第一个节点先保留,从第二个节点开始删除,最后删除phead;
*/
if (phead == NULL)
{
return NULL;
}
else
{
StackNode *p1, *p2;
p1 = p2 = NULL;
p1 = phead;//头结点
while (p1->pNext != NULL)
{
p2 = p1->pNext;
p1->pNext = p2->pNext;
free(p2);//释放节点
p2 = NULL;
}
free(phead);
phead = NULL;
}
return NULL;
}
StackNode *printAll(StackNode *phead)//全输出;递归方法
{
if (phead == NULL)
{
return NULL;
}
else
{
printf("%d ,%d, %p, %p \n", phead->num, phead->data,phead,phead->pNext);
printAll(phead->pNext);
}
}
void main1()
{
StackNode *phead =NULL;
phead = init(phead);
phead = push(phead, 1, 1);
phead = push(phead, 2, 11);
phead = push(phead, 3, 21);
phead = push(phead, 4, 41);
phead = push(phead, 5, 51);
printAll(phead);
StackNode *pout = (StackNode*)malloc(sizeof(StackNode));
phead = pop(phead, pout);
printAll(phead);
phead = freeall(phead);
printAll(phead);
system("pause");
}
void main()
{
int num;
scanf("%d", &num);
printf("NUM = %d\n", num);
StackNode *pout = (StackNode*)malloc(sizeof(StackNode));
StackNode *phead = NULL;
phead = init(phead);
while (num)
{
phead = push(phead, 1, num % 2);
num /= 2;
}
while (phead != NULL)
{
phead = pop(phead, pout);
printf("%d,", pout->data);
}
system("pause");
}
/////////// .h ///////
typedef int datatype;
struct MyStruck
{
int num;//编号
datatype data;//数据
struct MyStruck *pNext;//指针域
};
typedef struct MyStruck StackNode;
StackNode *init(StackNode *phead);//初始哈
StackNode *push(StackNode *phead, int num, datatype data);//压站
StackNode *pop(StackNode *phead, StackNode *poutdata);//出栈
StackNode *freeall(StackNode *phead);//清楚数据
StackNode *printAll(StackNode *phead);//全输出
- C实现链式栈
- c++ 链式栈
- C/C++ 链式栈
- 链式栈(c)
- C 链式栈
- C链式栈实现
- C语言 链式栈
- c语言链式栈
- 数据结构 链式 栈 c实现
- C语言实现链式栈
- c链式栈的实现
- 链式栈的C实现
- 数据结构--链式栈(C语言)
- 链式栈 C语言数据结构
- C 算法精介----栈->链式栈
- C实现顺序栈和链式栈
- 用c语言实现的链式栈
- 链式栈的实现(ANSI C)
- 欧拉图详解
- [LeetCode] Merge k Sorted List (priority queue, min heap, comparator)
- 理解伪元素:Before和:After
- Hello 试用 breakpad (linux)
- OGRE 选中物体
- 链式栈(c)
- EL表达式详解
- 适配器模式和代理模式:
- 比较重要的android 网站下载地址
- Spring缓存机制
- PVS 7.6 部署教程
- 毕晓英4-01第二章第十二题
- 快排
- 【leetcode】Find Minimum in Rotated Sorted Array