链栈

链栈 栈的链式存储结构, 链栈是没有附加头结点的受限的单链表。
栈顶指针就是链表的头指针

链栈的类型;
 typedef struct StackNode
 {
  DataType data;
  struct StackNode *next;
 }StackNode;
 typedef struct LinkStack
 {
  StackNode *top;
  int stacksize;
 }

初始化栈
int InitStack(LinkStack *S)
{
 S->top = NULL;
 S->stacksize = 0;
 return 0;
}

判断链栈是否为空
int StackEmpty(LinkStack *S)
{
 if (S.top == NULL)
  return 1;
 else
  return 0;
}

元素入栈
int Push(LinkStack *S, DataType x)
{
 StackNode *p = (StackNode*)malloc(sizeof(StackNode));
 if (p == NULL)
  exit(1);
 p.data = x;
 p.next = S.top;
 S.top = p;
 S->stacksize++;
 return 0;
}

元素出栈
int Pop(LinkStack *S, DataType &x)
{
 StackNode *p = S->top;
 x = p->data;
 S->top = p->next;
 S->stacksize--;
 free(p);
 return 0;
}

取栈顶元素
int GetTop(LinkStack *S, DataType &x)
{
 if (StackEmpty(S))
 {
  printf("栈为空\n");
  return 1;
 }
 x = S->top->data;
 return 0;
}

总结:。。。。。。。。。

 

 

 

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

typedef struct StackNode
{
	int data;
	struct StackNode *next;
}StackNode;

typedef struct LinkStack
{
	StackNode *top;
	int stacksize;
}LinkStack;

int InitStack(LinkStack *S);
int StackEmpty(LinkStack *S);
int Push(LinkStack *S, int x);
int Pop(LinkStack *S, int &x);
int GetTop(LinkStack *S, int &x);

int main()
{
	int i, x;
	LinkStack *S = (LinkStack*)malloc(sizeof(LinkStack));
	InitStack(S);
	for (i=0; i<10; i++)
	{
		Push(S, i);
	}
	GetTop(S, x);
	printf("栈顶元素为:%d\n", x);
	for (i=0; i<5; i++)
	{
		Pop(S, x);
		printf("%d ", x);
	}
	printf("\n");
	return 0;
}

int InitStack(LinkStack *S)
{
	S->top = NULL;
	S->stacksize = 0;
	return 0;
}

int StackEmpty(LinkStack *S)
{
	if (S->top == NULL)
		return 1;
	return 0;
}

int Push(LinkStack *S, int x)
{
	StackNode *p = (StackNode*)malloc(sizeof(StackNode));
	if (p == NULL)
		exit(2);
	p->data = x;
	p->next = S->top;
	S->top = p;
	S->stacksize++;
	return 0;
}

int Pop(LinkStack *S, int &x)
{
	StackNode *p = S->top;
	x = p->data;
	S->top = p->next;
	S->stacksize--;
	free(p);
	return 0;
}

int GetTop(LinkStack *S, int &x)
{
	if (StackEmpty(S))
		return 1;
	x = S->top->data;
	return 0;
}


 

posted on 2012-11-28 22:06  zm001  阅读(261)  评论(0)    收藏  举报