數據結構鏈棧的各種操作

/** 
    頭文件stu.h 
    @jeasn168 
*/  
#include<stdio.h>  
#include<string.h>  
#define MaxS 50  
typedef struct  
{  
    char name[MaxS];  
    char stuno[MaxS];  
    float score;  
}stu;  
//輸出stu  
void DispStu(const stu &s)  
{  
    printf("Name:%s\n",s.name);  
    printf("StuNo:%s\n",s.stuno);  
    printf("Score:%f\n",s.score);  
}  
   
   
//比較stu類型  
int isEqual(const stu &a,const stu &b)  
{  
    if(strcmp(a.name,b.name)==0&&strcmp(a.stuno,b.stuno)==0&&a.score==b.score)  
        return 1;  
    else  
        return 0;  
}  
   

/** 
    鏈棧LinkStack.cpp 
    @jeasn168 
*/  
#include<stdio.h>
#include<malloc.h>
#include"stu.h"
//#define MaxSize 1000
typedef stu ElemType;
//定義鏈棧結構
typedef struct LNode
{
	ElemType data;
	struct LNode *next;
}LiStack;

//初始化
void InitStack(LiStack *&s)
{
	s=(LiStack *)malloc(sizeof(LiStack));
	s->next=NULL;
	printf("初始化棧!\n");
}

//判斷棧是否爲空
int StackEmpty(LiStack *s)
{
	return(s->next==NULL);
}

//進棧,採用頭插法
int Push(LiStack *&s,const ElemType &e)
{
	LiStack *p;
	p=(LiStack *)malloc(sizeof(LiStack));//創建節點
	p->data=e;
	p->next=s->next;
	s->next=p;
	return 1;
}


//出棧
void Pop(LiStack *&s,ElemType &e)
{
	if(StackEmpty(s))
	{
		printf("棧已空!\n");
	
	}
	LiStack *p=s->next;
	e=p->data;
	s->next=p->next;
	free(p);
	
}
//求棧的長度
int StackLength(LiStack *s)
{
	LiStack *p=s->next;
	int len=0;
	while(p!=NULL)
	{
		len++;
		p=p->next;
	}
	return len;

}

//輸出棧的內容
void DispLiStack(LiStack *s)
{
	LiStack *p=s->next;
	while(p!=NULL)
	{
		DispStu(p->data);
		p=p->next;
	}
	printf("\n");


}

//銷燬棧
void DestroyStack(LiStack *&s)
{
	LiStack *p=s->next;
	while(p!=NULL)
	{
		s->next=p->next;
		free(p);
		p=s->next;
	}
	free(s);
	printf("銷燬棧!\n");
}
int main()
{
	stu student[5]={{"Li","S12101",85},{"Liu","S12102",92.5},{"Wang","S12103",54},{"Huang","S12104",76},{"John","S12105",78}};
	stu st1={"LiLy","S12108",85},st2;
	int t,i=0,len=0;
	
	t=sizeof(student)/sizeof(stu);
	LiStack *stuLiStack;
	InitStack(stuLiStack);
	printf("頭插法建棧:\n");
	for(i=0;i<t;i++)
	{
		Push(stuLiStack,student[i]);
	}
	len=StackLength(stuLiStack);
	printf("棧長度爲:%d\n",len);
	
	printf("輸出棧內容:\n");
	DispLiStack(stuLiStack);


	printf("棧頂元素彈出:\n");
	Pop(stuLiStack,st2);
	DispStu(st2);

	printf("輸出棧內容:\n");
	DispLiStack(stuLiStack);
	DestroyStack(stuLiStack);
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章