您的位置:首页 > 理论基础 > 数据结构算法

数据结构——栈之顺序存储

2017-04-12 09:22 344 查看

数据结构——栈之顺序存储

        栈的顺序存储可以用数组描述,增加一个变量top存储栈顶元素在数组中的下标,下面是基本操作的实现代码:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
/**栈的顺序存储**/
#define Max_Size 100
typedef struct Data{
char name[10];
int age;
};
typedef struct{
Data data[Max_Size];
int top;	//存储栈顶元素在数组中的下标
}Stack;
/**初始化空栈**/
void InitStack(Stack *S){
S->top = 0;
}
/**判断是否为空栈**/
int StackEmpty(Stack S){
//为空返回1否则返回0
if(S.top==0) return 1;
else return 0;
}
/**返回栈顶元素**/
void GetTop(Stack S,Data *d){
if(StackEmpty(S)==1)
printf("It's an empty stack!");
else{
Data data = S.data[S.top-1];
strcpy(d->name,data.name);
d->age = data.age;
}
}
/**向栈顶插入新元素 入栈**/
void PushStack(Stack *S,Data d){
int top = S->top;
if(top<Max_Size){
strcpy(S->data[top].name,d.name);
S->data[top].age = d.age;
S->top++;
}else{
printf("Error!It's a full stack!\n");
}
}
/**从栈顶删除元素 出栈**/
void PopStack(Stack *S,Data *d){
if(StackEmpty(*S)==1){
printf("It's an empty stack!\n");
}else{
strcpy(d->name,S->data[S->top-1].name);
d->age = S->data[S->top-1].age;
S->top--;
}
}
/**清空栈**/
void ClearStack(Stack *S){
if(StackEmpty(*S)==1){
printf("It's already an empty stack!\n");
}else{
S->top = 0;
}
}
/**打印栈内信息**/
void PrintStack(Stack S){
if(StackEmpty(S)==1){
printf("It's an empty stack!\n");
}else{
printf("name----age\n");
int len = S.top;
for(int i =0;i<len;i++){
printf("%s    %d\n",S.data[i].name,S.data[i].age);
}
}
}
void main(){
Data d;
char name[10];
int age;
int i=1;
Stack S;
while(i){
printf("1、初始化空栈\t2、入栈\t3、出栈\t4、栈顶元素5、清空栈6、打印信息\n");
scanf("%d",&i);
switch (i){
case 1:
InitStack(&S);
break;
case 2:
printf("Input the name: ");
scanf("%s",&d.name);
printf("Input the age: ");
scanf("%d",&d.age);
PushStack(&S,d);
break;
case 3:
PopStack(&S,&d);
printf("Deleted (%s,%d)\n",d.name,d.age);
break;
case 4:
GetTop(S,&d);
printf("Top element is (%s,%d)\n",d.name,d.age);
break;
case 5:
ClearStack(&S);
break;
case 6:
PrintStack(S);
break;
default:
break;
}
}
system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  顺序存储