棧基本操作的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;
}
第一次發帖,資料結構中棧的基本操作的實作,歡迎大家指導!