チェーンスタック構造の入スタック、出スタック、戻りスタックトップ要素、クリアスタックなど

21944 ワード

学習したコードだけを皆さんと共有します:ヘッダファイルLinkStackを定義します.h
#ifndef LINKSTACK_H
#define LINKSTACK_H
//    
typedef struct LINKNODE
{
	struct LINKNODE* next;
}LinkNode;
//   
typedef struct LINKSTACK
{
	LinkNode head;
	int size;
}LinkStack;

//    
LinkStack* Init_LinkStack();
//    
void Push_LinkStack(LinkStack* stack,LinkNode* data);
//      
LinkNode* Top_LinkStack(LinkStack* stack);
//  
void Pop_LinkStack(LinkStack* stack);
//      
int IsEmpty(LinkStack* stack);
//         
int Size_LinkStack(LinkStack* stack);
//  
void FreeSpace_LinkStack(LinkStack* stack);
//   
void Clear_LinkStack(LinkStack* stack);



#endif

LinkStackでcppファイルでの実装関数
#include
#include
#include"LinkStack.h"

//    
LinkStack* Init_LinkStack()
{
	LinkStack* stack=(LinkStack*)malloc(sizeof(LinkStack));
	stack->head.next=NULL;
	stack->size=0;

	return stack;
	
}
//    
void Push_LinkStack(LinkStack* stack,LinkNode* data)
{
	if(stack==NULL)
		return;
	if(data==NULL)
		return;
	data->next=stack->head.next;
	stack->head.next=data;
	stack->size++;
}
//      
LinkNode* Top_LinkStack(LinkStack* stack)
{
	if(stack==NULL)
		return NULL;
	return stack->head.next;

}
//  
void Pop_LinkStack(LinkStack* stack)
{
	if(stack->size==NULL)
		return;
	if(stack==NULL)
		return;
	//          ,                
	LinkNode* pNext=stack->head.next;
	stack->head.next=pNext->next;
	stack->size--;
}
//      
int IsEmpty(LinkStack* stack)
{
	if(stack==NULL)
	{
		return -1;
	}
	if(stack->size==NULL)
		return 1;
	return 0;
}
//         
int Size_LinkStack(LinkStack* stack)
{
	if(stack==NULL)
	{
		return 0;
	}
	return stack->size;
}
//  
void FreeSpace_LinkStack(LinkStack* stack)
{
	if(stack)
	{
		free(stack);
	}
		
}
//   
void Clear_LinkStack(LinkStack* stack)
{
	stack->head.next=NULL;
	stack->size=0;
}


最後に、メイン関数でソースコードをテストします.
#include
#include
#include
#include"LinkStack.h"
typedef struct PERSON
{
	LinkNode node;
	char name[64];
	int age;
}Person;

int main()
{
	//       
	LinkStack* stack=Init_LinkStack();
	Person p1,p2,p3,p4,p5;
	strcpy_s(p1.name,"aaa");
	strcpy_s(p2.name,"bbb");
	strcpy_s(p3.name,"ccc");
	strcpy_s(p4.name,"ddd");
	strcpy_s(p5.name,"eee");
	p1.age=10;
	p2.age=20;
	p3.age=30;
	p4.age=40;
	p5.age=50;
	//  
	Push_LinkStack(stack,(LinkNode*)&p1);
	Push_LinkStack(stack,(LinkNode*)&p2);
	Push_LinkStack(stack,(LinkNode*)&p3);
	Push_LinkStack(stack,(LinkNode*)&p4);
	Push_LinkStack(stack,(LinkNode*)&p5);
	//    
	while(Size_LinkStack(stack)>0)
	{
		//    
		Person* person=(Person*)Top_LinkStack(stack);
		printf("Name:%s Age:%d
"
,person->name,person->age); // Pop_LinkStack(stack); } //Clear_LinkStack(stack); FreeSpace_LinkStack(stack); return 0; }

コードテストの中で崩壊が现れて、本当に疲れて、各位の大神は自分で探し当てるようにしましょうO(∩∩)Oははははは(隔日探し当てましたはははやはり休みます)!