作为一个自动化专业毕业的年轻小伙,自己的编程水平有限,需要广泛学习训练。特此记录下自己编程学习代码。非科班毕业,没有严格考量时间和空间的复杂度。
学习当然是学习了别人的思想然后内化的呀。
源码1 Stack.h
#ifndef STACK_H
#define STACK_H
#include "linklist1.h"
#ifdef __cplusplus
extern "C"
{
#endif
//创建栈
void *CreatStack(void);
//压栈(压入数据指针)
void PushStack(void *pStack,void *pData);
//出栈
void PopStack(void *pStack);
//获取栈顶数据指针
void *GetStackTop(void *pStack);
//清空栈内数据指针
void ClearStack(void *pStack);
//判断栈是否为空
bool IsStackEmpty(void *pStack);
//销毁栈
void DestroyStack(void *pStack);
#ifdef __cplusplus
}
#endif
#endif
2 Stack.c
#include "Stack.h"
//创建栈
void *CreatStack(void)
{
struct LinkList *pLinkList;
pLinkList = CreatLinkList();
if (pLinkList == NULL)
{
return(NULL);
}
return(pLinkList);
}
//压栈(压入数据指针)
void PushStack(void *pStack,void *pData)
{
if (pStack == NULL)
{
return;
}
if (pData == NULL)
{
return;
}
struct LinkList *pLinkList;
pLinkList = (struct LinkList *)pStack;
//入栈即插入到链表尾
InsertToLinkListTail(pLinkList,pData);
}
//出栈
void PopStack(void *pStack)
{
if (pStack == NULL)
{
return;
}
struct LinkList *pLinkList;
pLinkList = (struct LinkList *)pStack;
//出栈即删除链表尾
DeleteLastNodeOfLinkList(pLinkList);
}
//获取栈顶数据指针
void *GetStackTop(void *pStack)
{
if (pStack == NULL)
{
return(NULL);
}
struct LinkList *pLinkList;
pLinkList = (struct LinkList *)pStack;
if (pLinkList->length < 1)
{
return(NULL);
}
//栈顶元素即为链表最后一个节点的数据指针
void *pData;
pData = GetDataPointerOfLastNodeInLinkList(pLinkList);
return(pData);
}
//清空栈内数据指针
void ClearStack(void *pStack)
{
if (pStack == NULL)
{
return(NULL);
}
struct LinkList *pLinkList;
pLinkList = (struct LinkList *)pStack;
ClearLinkList(pLinkList);
}
//判断栈是否为空
bool IsStackEmpty(void *pStack)
{
if (pStack == NULL)
{
return(true);
}
struct LinkList *pLinkList;
pLinkList = (struct LinkList *)pStack;
if (pLinkList->length < 1)
{
return(true);
}
else
{
return(false);
}
}
//销毁栈
void DestroyStack(void *pStack)
{
if (pStack == NULL)
{
return(NULL);
}
struct LinkList *pLinkList;
pLinkList = (struct LinkList *)pStack;
DestroyLinkList(pLinkList);
}
3 main.c(测试用)
#include "Stack.h"
//压栈和读取栈顶元素测试
void Test0(void)
{
void *pStack;
pStack = CreatStack();
int a = 10;
int b = 20;
PushStack(pStack,&a);
int *p1 = (int *)GetStackTop(pStack);
printf("*p1 = %dn",*p1);
PushStack(pStack,&b);
p1 = (int *)GetStackTop(pStack);
printf("*p1 = %dn",*p1);
}
//综合测试
void Test1(void)
{
void *pStack;
pStack = CreatStack();
int team[] = {1,2,3,4,5};
int *p;
for (int i = 0; i < 5; i ++)
{
PushStack(pStack,&team[i]);
}
while (1)
{
if (IsStackEmpty(pStack) == false)
{
p = (int *)GetStackTop(pStack);
printf("*p = %dn",*p);
PopStack(pStack);
}
else
{
break;
}
}
DestroyStack(pStack);
}
int main()
{
Test1();
getchar();
return (0);
}



