#include
#include
typedef struct StackLNode//用于即将加入栈的节点
{
int date;
struct StackLNode*next;
}StackLNode,*StackList;
typedef struct StackPoint//栈本身
{
StackList top;
int count;
}StackPoint;
void Intivital(StackPoint *stackpoint);
void InStack(StackPoint *stackpoint,int pushNumber);
void Output(StackPoint *stackpoint);
int PutStack(StackPoint *stackpoint);
int main()
{
StackPoint *stackpoint;
Intivital(stackpoint);
for(int i=0;i<10;i++)
InStack(stackpoint,i);
printf("\n");
Output(stackpoint);
printf("\n入栈完成\n");
printf("%d\n",PutStack(stackpoint)); //输出出栈的返回值
}
void Intivital(StackPoint *stackpoint)//头指针的初始化
{
stackpoint->count=0;
}
void InStack(StackPoint *stackpoint,int pushNumber)//入栈
{
StackList stacklist=(StackList)malloc(sizeof(StackLNode));
stacklist->date=pushNumber;
stacklist->next=stackpoint->top;
stackpoint->top=stacklist;
stackpoint->count++;
printf("%d\t",stacklist->date);
}
void Output(StackPoint *stackpoint)//输出栈中的内容
{
StackPoint *stackpoint_1=stackpoint;
for(int i=0;icount;i++)
{
printf("%d\t",stackpoint_1->top->date);
stackpoint_1->top=stackpoint_1->top->next;
}
}
int PutStack(StackPoint *stackpoint)//出栈
{
int getNumber=2;
printf("%d",getNumber);
getNumber=stackpoint->top->date;
stackpoint->top=stackpoint->top->next;
stackpoint->count--;
printf("出栈完成!\n");
return getNumber;
}
程序最大的问题是Output函数里会修改top,导致链表指向结尾(相当于已经出栈了一次),所以再出栈就错了,还有各种小错误,自己对照下,就不解释了。
// Q769244.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<stdio.h>
#include<malloc.h>
typedef struct StackLNode//用于即将加入栈的节点
{
int date;
struct StackLNode*next;
}StackLNode,*StackList;
typedef struct StackPoint//栈本身
{
StackList top;
int count;
}StackPoint;
void Intivital(StackPoint *stackpoint);
void InStack(StackPoint *stackpoint,int pushNumber);
void Output(StackPoint *stackpoint);
int PutStack(StackPoint *stackpoint);
int main()
{
StackPoint sp;
sp.top = NULL;
StackPoint *stackpoint = &sp;
Intivital(stackpoint);
for(int i=0;i<10;i++)
InStack(stackpoint,i);
printf("\n");
Output(stackpoint);
printf("\n入栈完成\n");
printf("%d\n",PutStack(stackpoint)); //输出出栈的返回值
}
void Intivital(StackPoint *stackpoint)//头指针的初始化
{
stackpoint->count=0;
}
void InStack(StackPoint *stackpoint,int pushNumber)//入栈
{
StackList stacklist=(StackList)malloc(sizeof(StackLNode));
stacklist->date=pushNumber;
stacklist->next=stackpoint->top;
stackpoint->top=stacklist;
stackpoint->count++;
printf("%d\t",stacklist->date);
}
void Output(StackPoint *stackpoint)//输出栈中的内容
{
StackList p=stackpoint->top;
for(int i=0;i < stackpoint->count;i++)
{
printf("%d\t",p->date);
p=p->next;
}
}
int PutStack(StackPoint *stackpoint)//出栈
{
//int getNumber=2;
//printf("%d",getNumber);
int getNumber=stackpoint->top->date;
stackpoint->top=stackpoint->top->next;
stackpoint->count--;
printf("出栈完成!\n");
return getNumber;
}