学习数据结构感觉没有什么体会,特此写此博文,一方面回忆知识点,另一方面可以帮助那些在学习这门课的同学何乐而不为呢.当然鉴于水平有限,如果读者朋友发现有什么问题,可以联系我,非常感谢,或者给我评论,http://www/uc/myshow/blog/misc/gif/E___6721EN00SIGG.gif
本文参考数据结构C语言版 严蔚敏教材.
#include
#include
#include
#define STACK_INIT_SIZE 100
//初始量
#define STACKINCREMENT
10 //增加量
typedef int Status;
typedef int SElemType;
typedef struct {
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S)
{
//构造空栈
S.base = (SElemType *)malloc (STACK_INIT_SIZE *sizeof
(SElemType));
if (!S.base ) exit(-2);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return 1;
}
Status GetTop (SqStack S,SElemType
&e){//得到栈顶元素
if (S.top ==S.base) return 0;
e = *(--S.top);
return 1;
}
Status Pop (SqStack &S,SElemType
&e){//出栈
if (S.top ==S.base) return 0;
S.top --;
e = *(S.top);
return 1;
}
Status Push (SqStack &S,SElemType
e){//入栈
if (S.top-S.base>=S.stacksize){
S.base = (SElemType*)realloc
(S.base,(S.stacksize+STACKINCREMENT)*sizeof
(SElemType));
if (S.base==NULL) exit(-1);
S.top= S.base + S.stacksize;//有点问题
S.stacksize += STACKINCREMENT;
}
*(S.top) =e;
S.top++;
return 1;
}
Status StackEmpty(SqStack S)//若栈S为空,则返回1,否则返回0
{
if(S.top==S.base)
return
1;
else
return 0;
}//StackEmpty
Status StackLength(SqStack
S){
//返回S的元素个数
int length= 0;
if (S.base ==S.top) return length;
else {
while (S.base!=S.top){
length++;
S.top--;
}
}
return length;
}//StackLength
Status StackTraverse(SqStack &S)
{//从栈顶到栈底依次对栈中的每个元数调用函数printf();
if (!StackEmpty(S)){
SElemType *p=S.top;
while(p>S.base){
printf("%d\t", * --p);
}
printf("\n\n");
}
return 0;
}
int
main()
{
int m;
printf(" 1,建立一个栈\n");
printf(" 2,入栈\n");
printf(" 3,出栈\n");
printf(" 4,得到栈顶元素\n");
printf (" 5,栈中元素个数\n");
printf(" 0,结束程序\n");
do {
printf ("请输入需要操作对应的操作:");
SqStack S;
scanf ("%d",&m);
fflush(stdin);//清空缓冲区
switch (m){
case 1: {
InitStack (S);
int n,num;
printf ("请输入栈中元素的个数:
");
scanf ("%d",&n);
fflush (stdin);
printf ("请依次输入栈中元素:
");
for(int i=0;i
scanf ("%d",&num);
Push(S,num);
}
StackTraverse(S);
break;
}
case 2:{
int num;
printf ("请输入你要入栈的
数字: ");
scanf("%d",&num);
fflush (stdin);
Push (S,num) ;
StackTraverse( S);
break;
}
case 3:{
int num;
Pop (S, num);
printf ("出栈元素是
%d\n",num);
StackTraverse( S);
break;
}
case 4:{
int n;
GetTop(S,n);
printf (" %d \n",n);
StackTraverse( S);
}
case 5:{
printf ("\n栈中元素个数:
%d \n",StackLength(S));
break;
}
}
}while(m
!=0);
return 0;
}
下面是程序运行的结果:
http://s2/mw690/003AAPhVzy6GTKeGLSx81&690
加载中,请稍候......