刚开始学数据结构还有很多没能理解,代码中少了很多功能(出栈操作,判断栈空...数组实现栈的功能也可以尝试)先这么写了,之后会陆续更新!
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct Node //定义节点
{
int data;
struct Node *link;
}Node,* PNode;
typedef struct Stack //定义栈结构体
{
PNode top;
PNode bottom;
}Stack, * PStack;
//函数声明
void DispStack(PStack pS);
void InitStack(PStack pS);
void PushStack(PStack pS,int n);
int main()
{
Stack S;
int n;
scanf("%d",&n);
//printf("%d\n",n);
InitStack(&S);//栈的初始化
//printf("%d",__LINE__);//调试使用验证段错误所在
PushStack(&S,n);//压栈操作
//printf("%d",__LINE__);
DispStack(&S);//显示栈顶数据
//printf("%d",__LINE__);
}
void InitStack(PStack pS)
{
/*
下面一段代码在写入的时候首尾指针都没有分配空间,没有建立节点,最后导致bottom不能指向栈底元素
//pS->top=(PNode)malloc(sizeof(Node));
//给top分配空间这边可以不用分配空间,因为未给top以及 ps中具体写入数据,只用到了指针具体的pS以及top都可以不需要malloc,不会出现断错误。
pS->top = NULL;//使栈顶其实时候指向空NULL为内存的0地址
pS->bottom = pS->top;//无实际作用
//printf("%d",__LINE__);
*/
//上面代码实现没有指针指向底部,下面代码在实现时插入开头会多出一个节点
pS->top=(PNode)malloc(sizeof(Node));
//pS->top->link = NULL;
pS->bottom = pS->top ;
pS->bottom->link = NULL;
}
void PushStack(PStack pS,int n)//押栈操作
{
//PNode ptr;
PNode ptr = (PNode)malloc(sizeof(Node));//用到data必须给出空间malloc
ptr->link = pS->top;
pS->top = ptr;
ptr->data = n;
}
void DispStack(PStack pS)
{
printf("%d",__LINE__);//调试
printf("%d\t",pS->top->data);
printf("%d",__LINE__);//调试
/*
do
{
}while(top = bottom)
*/
printf("\n");
}
作为数据结构的初始学习,以上这个代码可以说是功能相当欠缺的!后面跟新出新的完善代码!