[C语言]C语言实现栈(基于单向链表)

Posted 雾里赏花

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C语言]C语言实现栈(基于单向链表)相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include <stdlib.h>
typedef int DataType;

typedef struct node

    DataType data;
    struct node *next; 
StackElement;

typedef struct Stack_t

    int size;
    StackElement *top; 
Stack;

int stack_Init(Stack **);
int stack_Destory(Stack **); 
int stack_Pop(Stack*,DataType*);
int stack_Push(Stack*,DataType);
int stack_Size(Stack *);
// #define stack_Size(stack) ((stack)->size)

int main()

    Stack *mystack = NULL;
    DataType mydata;
    int i;
    printf("mystack is %x\\n",mystack);
    printf("size is %d\\n",stack_Size(mystack));
    stack_Init(&mystack);
    printf("mystack  Init!\\n");
    printf("mystack is %x\\n",mystack);
    printf("size is %d\\n",stack_Size(mystack));
    for(i=0;i<10;i++)
    
        stack_Push(mystack,i);
    
    printf("size is %d\\n",stack_Size(mystack));
    while(stack_Size(mystack) > 2)
    
        stack_Pop(mystack,&mydata);
        printf("pop data is %d\\n",mydata);
    
    printf("mystack is %x\\n",mystack);
    printf("size is %d\\n",stack_Size(mystack));
    stack_Destory(&mystack);
    printf("mystack  Destory!\\n");
    printf("mystack is %x\\n",mystack);
    printf("size is %d\\n",stack_Size(mystack));
    return 0;


/*************************************************
Function: 		stack_Init
Description: 	初始化栈
Input: 			stack:栈二级指针
Output: 		
Return:         成功0,失败-1
Other:          复杂度O(1)		
*************************************************/
int stack_Init(Stack **stack)

    Stack *new_stack = NULL;
    if((new_stack = (Stack*)malloc(sizeof(Stack))) == NULL)
    
        return -1;
    
    new_stack->top = NULL;
    new_stack->size = 0;
    *stack = new_stack;
    return 0;

/*************************************************
Function: 		stack_Destory
Description: 	销毁栈
Input: 			stack:栈二级指针
Output: 		
Return:         成功返回销毁结点数,失败-1
Other:          复杂度O(n)		
*************************************************/
int stack_Destory(Stack **stack)

    int count = 0;
    DataType data;
    if(*stack == NULL)
    
        return -1;
    
    count = (*stack)->size;
    while((*stack)->size > 0)
    
        stack_Pop(*stack,&data);
        free((*stack)->top);
    
    free(*stack);
    *stack = NULL;
    return count;

/*************************************************
Function: 		stack_Pop
Description: 	出栈
Input: 			stack:栈指针
                data:出栈结点的数据
Output: 		
Return:         成功0,失败-1
Other:          复杂度O(1)		
*************************************************/
int stack_Pop(Stack *stack,DataType *data)

    if(stack == NULL || stack->size == 0)
    
        return -1;
    
    stack->size--;
    *data = stack->top->data;
    stack->top = stack->top->next;
    return 0;

/*************************************************
Function: 		stack_Push
Description: 	入栈
Input: 			stack:栈指针
                data:入栈结点的数据
Output: 		
Return:         成功0,失败-1
Other:          复杂度O(1)		
*************************************************/
int stack_Push(Stack *stack,DataType data)

    StackElement *newElmt = NULL;
    if(stack == NULL || (newElmt = (StackElement*)malloc(sizeof(StackElement))) == NULL)
    
        return -1;
    
    newElmt->data = data;
    newElmt->next = stack->top;
    stack->size++;
    stack->top = newElmt;
    return 0;

/*************************************************
Function: 		stack_Size
Description: 	栈的
Input: 			stack:栈指针
                data:入栈结点的数据
Output: 		
Return:         成功0,失败-1
Other:          复杂度O(1)		
*************************************************/
int stack_Size(Stack *stack)

    if(stack == NULL)
    
        return -1;
    
    return stack->size;

运行结果

以上是关于[C语言]C语言实现栈(基于单向链表)的主要内容,如果未能解决你的问题,请参考以下文章

C语言通讯录系统——C语言单向链表实现

基于C语言的栈实现

基于C语言的栈实现

基于C语言的栈实现

数据结构之单向链表(C语言实现)

数据结构之单向链表(C语言实现)