栈的结构比较简单,实现的过程中前面已经写好的线性表代码可以直接拿来用。只要在头文件中#include "seqlist.h"就可以了。

创建栈相当于创建线性表,销毁栈相当于销毁线性表。push相当于在线性表尾部插入元素,尾插法,pop相当于从线性表尾部拿出元素。

C语言代码:

main_seq_stack.c文件(上层应用)

 1 #include "stdio.h"
 2 #include "stdlib.h"
 3 #include "string.h"
 4 #include "seq_stack.h"
 5 void main()
 6 {
 7     int i = 0;
 8     int a[10];
 9     SeqStack* stack = NULL;
10     int *pTmp = NULL;
11     stack = SeqStack_Create(10);
12     for (i = 0; i < SeqStack_Capacity(stack); i++)
13     {
14         a[i] = i + 1;
15         SeqStack_Push(stack, &a[i]);
16     }
17     printf("capacity:%d \n", SeqStack_Capacity(stack));
18     printf("size:%d \n", SeqStack_Size(stack));
19     pTmp = (int*)SeqStack_Top(stack);
20     printf("top:%d \n", *pTmp);    
21     while (SeqStack_Size(stack) > 0)
22     {
23         printf("pop:%d \n", *((int *)SeqStack_Pop(stack)));
24     }
25     SeqStack_Destroy(stack);
26     system("pause");
27     return;
28 }

seq_stack.h文件(头文件)

 1 #ifndef _MY_SEQ_STACK_H_
 2 #define _MY_SEQ_STACK_H_
 3 typedef void SeqStack;
 4 SeqStack* SeqStack_Create(int capacity);
 5 void SeqStack_Destroy(SeqStack* list);
 6 void SeqStack_Clear(SeqStack* list);
 7 int SeqStack_Size(SeqStack* list);
 8 int SeqStack_Capacity(SeqStack* list);
 9 int SeqStack_Push(SeqStack* stack, void* item);
10 void* SeqStack_Pop(SeqStack* stack);
11 void* SeqStack_Top(SeqStack* stack);
12 #endif

seqlist.c文件(底层库实现)

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "seq_stack.h"
#include "seqlist.h"
//创建栈相当于创建线性表
SeqStack* SeqStack_Create(int capacity)
{
     return SeqList_Create(capacity);
}
//销毁栈相当于销毁线性表
void SeqStack_Destroy(SeqStack* stack)
{
    SeqList_Destroy(stack);
}
void SeqStack_Clear(SeqStack* stack)
{
    SeqList_Clear(stack);
}
int SeqStack_Size(SeqStack* stack)
{
    return SeqList_Length(stack);
}
int SeqStack_Capacity(SeqStack* stack)
{
    return SeqList_Capacity(stack);
}
//相当于在线性表尾部插入元素,尾插法
int SeqStack_Push(SeqStack* stack, void* item)
{
    return SeqList_Insert(stack, item, SeqList_Length(stack));
}
//相当于从线性表尾部拿出元素。
void* SeqStack_Pop(SeqStack* stack)
{
    return SeqList_Delete(stack, SeqList_Length(stack) - 1);
}
void* SeqStack_Top(SeqStack* stack)
{
    return SeqList_Get(stack, SeqList_Length(stack) - 1);
}

 

posted @ 2018-03-16 09:34  Alexadar  阅读(107)  评论(0)    收藏  举报