天天看點

棧基本操作的C語言實作(附源代碼已測試)  棧基本操作的C語言實作

  棧基本操作的C語言實作

/
//      作者:happy_fun        //
//  棧基本操作的C語言實作      //
//   時間:2011年11月19号      //
//   未經作者允許不得轉載!    //
/
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREACE 10

typedef struct SElemType
{
	char data;
}elemtype;
typedef struct SqStack
{
	elemtype *base;//base是變量名字,elemtype *表示base隻能存儲elemtype類型的變量的位址//int *表示存儲整型變量位址
	elemtype *top;//top是變量名字,elemtype *表示top隻能存儲elemtype類型的變量的位址,指針就是位址,位址就是指針!
	int strcksize;
}stack,*pstack;

void main()
{
	int Push(stack *s,elemtype e);
	int InitStack(stack *s);
	elemtype Pop(stack *s,elemtype e);
	elemtype GetTop(stack *s,elemtype e);
	int StackLength(stack *s);

	int a;
	stack s;
	elemtype e,del;
	e.data='T';
	if(InitStack(&s)==1)
		printf("構造空棧成功!\n\n");
	if(Push(&s,e))
		printf("壓棧成功!\n\n");
	printf("傳回的棧頂元素為:%c\n\n",GetTop(&s,e));
	printf("删除的棧頂元素為:%c\n\n",Pop(&s,del));
	printf("該棧的長度為:%d\n\n",a=StackLength(&s));
}

//構造空棧
int InitStack(stack *s)//s是變量名,stack *表示s隻能存儲stack類型的變量位址
{
	s->base=(elemtype *)malloc(STACK_INIT_SIZE*sizeof(elemtype));
	s->top=s->base; 
	s->strcksize=STACK_INIT_SIZE;
	return 1;
}
///
//将元素e壓入棧
int Push(stack *s,elemtype e)
{
	if(s->top-s->base>=s->strcksize)//棧滿追加空間
	{
		s->base=(elemtype *)realloc(s->base,(s->strcksize+STACKINCREACE)*sizeof(elemtype));
		s->strcksize=s->strcksize+(s->strcksize+STACKINCREACE);
	}
	if(!s->base)
		exit(0);
	*(s->top)=e;
	s->top++;
	printf("配置設定的存儲空間為:%d\n",s->strcksize);
	return 1;
}
//
//删除棧頂元素
elemtype Pop(stack *s,elemtype e)
{
	if(s->top==s->base)
	{
		printf("出錯!\n");
		exit(0);
	}
	s->top--;
	e=*(s->top);
	printf("删除棧頂元素成功!\n");
	return e;
}
//
//用e傳回棧頂元素
elemtype GetTop(stack *s,elemtype e)
{
	if(s->top==s->base)
	{
		printf("Error!\n");
		exit(0);
	}
	s->top=s->top-1;
	e=*(s->top);
	s->top=s->top+1;
	return e;
}
/
//傳回棧的元素個數,即棧的長度
int StackLength(stack *s)
{
	int length;
	length=s->strcksize;
	return length;
}
           

第一次發帖,資料結構中棧的基本操作的實作,歡迎大家指導!