數據結構的一些講解,供學習者參考,也順帶作爲複習
棧是限制在表的一端進行插入和刪除的線性表,允許插入、刪除的一段成爲棧頂,另一個固定端稱爲棧底,當表中沒有元素時稱爲空棧。如圖所示的棧中有3個元素,進棧的順序是a1、a2、a3,當需要出棧時其順序爲a3、a2、a1,所以棧又稱爲後進先出的線性表(Last In First Out),簡稱LIFO表。
初始置空棧算法
SeqStack *Init_SeqStack()
{
SeqStack *s;
s=(SeqStack *)malloc(sizeof(SeqStack));//申請棧空間
s->top=-1;//初始化棧頂指針
return s;
}
判斷是否爲空棧
int Empty_SeqStack(SeqStack *s)
{
if(s->top==-1)
return 1;
else
return 0;
}
入棧算法
int Push_SeqStack(SeqStack *s,int x)
{
if(s->top==MAXSIZE-1)//棧滿不能入棧
{
printf("棧滿不能入棧\n");
return 0;
}
else
{
s->top++;
s->data[s->top]=x;
return (printf("入棧成功!\n"));
}
}
出棧
int Pop_SeqStack(SeqStack *s,int *x)
{
if(Empty_SeqStack(s))//棧空不能出棧
return 0;
else
{
*x=s->data[s->top];//棧頂元素存入*x,返回
s->top--;//更新棧頂指針
return 1;
}
}
取棧頂元素
int Top_SeqStack(SeqStack *s,int *x)
{
if(Empty_SeqStack(s))//棧空無元素
return 0;
else
{
*x=s->data[s->top];
return 1;
}
}
輸出棧內所有元素
int Out_SeqStack(SeqStack *s)
{
int i=s->top;
if(Empty_SeqStack(s))
return 0;
while(s->top>-1)
{
printf("%3d",s->data[s->top]);
s->top--;
}
s->top=i;
return 1;
}
主函數實現
void main()
{
int model,item,flag;
SeqStack *seqstack=NULL;
seqstack=Init_SeqStack();
while(1)
{
printf("請選擇\n【1】入棧\n【2】出棧\n【3】取棧頂元素\n【4】輸出棧內所有元素\n【5】退出程序\n");
printf("請輸入: ");
scanf("%d",&model);
switch(model)
{
case 1:
while(1)
{
printf("請輸入插入的值('0'代表輸入結束): ");
scanf("%d",&item);
if(item==0)
break;
if(!Push_SeqStack(seqstack,item))
break;
}
break;
case 2:
Pop_SeqStack(seqstack,&flag);
printf("棧頂元素 %d 已成功出棧!\n",flag);
break;
case 3:
Top_SeqStack(seqstack,&flag);
printf("棧頂元素爲: %d\n",flag);
break;
case 4:
Out_SeqStack(seqstack);
printf("\n");
break;
case 5:
exit(0);
default :
break;
}
}
}
需要源代碼的歡迎下載,免積分,共同學習,家下來每天都會分享一篇,持續一個星期
源程序下載請點擊此處,歡迎指正