生活随笔
收集整理的這篇文章主要介紹了
栈的C语言实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一個棧的C語言實現,函數聲明放在 line_list.h 頭文件匯總,函數定義放在line_list.c 中,main.c 用來測試各個函數.
1.文件 stack.h
// stack.h#ifndef __STACK_H__
#define __STACK_H__typedef int DataType;
typedef struct node{DataType data;struct node * next;
}Stack;Stack* CreateStack(); //創建棧
void StackEmpty(Stack* ); //清空棧
void DestoryStack(Stack*); //撤銷(刪除)棧
int IsEmpty(Stack*); //判空
int PushStack(Stack*, DataType); //入棧
int PopStack(Stack*); //出棧
DataType GetTopElement(Stack*); //取棧頂元素#endif
文件 stack.c// stack.c/*一個基于鏈表實現的棧的簡單例子,沒有做逆向增長,固定長度等限制。此外,利用數組等也可實現棧。僅用來演示棧先進后出的原理。第一個元素存儲在 stack->next 中*/#include <stdio.h>
#include <stdlib.h>
#include "stack.h"//創建棧,此時棧中沒有任何元素
Stack* CreateStack()
{Stack *stack = (Stack*)malloc(sizeof(Stack));if(NULL != stack){stack->next = NULL;return stack;}printf("out of place.\n");return NULL;
}//清空棧
void StackEmpty(Stack* stack)
{while(!IsEmpty(stack)){PopStack(stack);}printf("now stack is empty. \n");
}//撤銷棧
void DestoryStack(Stack* stack)
{free(stack);printf("now stack is destoryed. \n");exit(0);
}int IsEmpty(Stack* stack)
{return (stack->next == 0);
}//入棧,成功返回1,失敗返回0, 把元素 data 存入 棧 stack 中
int PushStack(Stack* stack, DataType data)
{Stack* newst = (Stack*)malloc(sizeof(Stack));if(NULL != newst){newst->data = data;newst->next = stack->next; //s->next = NULL;stack->next = newst;return 1;}printf("out of place PushStack.\n");return 0;
}/*出棧,成功返回1,失敗返回0,出棧不取出元素值,只是刪除棧頂元素。如出棧要實現,取出元素值,并釋放空間,可結合取棧頂元素函數做修改,這里不再給出。*/int PopStack(Stack* stack)
{Stack* tmpst;if(!IsEmpty(stack)){tmpst = stack->next;stack->next = tmpst->next;free(tmpst);return 1;}return 0;
}//取棧頂元素,僅取出棧頂元素的值,取出之后,該元素,任然存在棧中。成功返回元素值,失敗輸出提示信息,并返回 -1
DataType GetTopElement(Stack* stack)
{if(!IsEmpty(stack)){return stack->next->data;}printf("stack is empty GetTopElement.\n");return -1;
}
文件main.c// main.c#include <stdio.h>
#include "stack.h"int main()
{//測試創建棧函數Stack* stack = CreateStack();printf("StackTopElement = %d \n",GetTopElement(stack));//測試入棧函數PushStack(stack,5); printf("StackTopElement = %d \n",GetTopElement(stack));PushStack(stack,6);printf("StackTopElement = %d \n",GetTopElement(stack));PushStack(stack,7);printf("StackTopElement = %d \n",GetTopElement(stack));//測試出棧函數PopStack(stack);printf("StackTopElement = %d \n",GetTopElement(stack));PopStack(stack);printf("StackTopElement = %d \n",GetTopElement(stack));//測試清空棧函數StackEmpty(stack);printf("StackTopElement = %d \n",GetTopElement(stack));//測試撤銷棧函數DestoryStack(stack);return 0;
}
轉載于:https://www.cnblogs.com/ay-a/p/9757903.html
總結
以上是生活随笔為你收集整理的栈的C语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。