• 栈的链式存储方法的C语言实现


      1 /*
      2   编译器:Dev-c++ 5.4.0 
      3   文件名:linkStack.cpp 
      4   代码版本号:1.0
      5   时间:2015年10月15日18:56:06
      6 
      7 */
      8 #include <stdio.h>
      9 #include <stdlib.h>
     10 #define ERROR 0
     11 #define OK 1
     12 #define FALSE 0
     13 #define TRUE 1
     14 #define OVERFLOW -2
     15 
     16 typedef int sElemType; 
     17 typedef int Status;  
     18 typedef struct lNode{
     19     sElemType data;
     20     struct lNode *next;
     21 }lNode,*linkStack;
     22 
     23 
     24 /*初始化空栈*/ 
     25 Status initStack(linkStack *s){
     26     *s=(linkStack)malloc(sizeof(lNode));
     27     if(!(*s))
     28         exit(OVERFLOW);
     29     (*s)->next=NULL;
     30     return OK; 
     31 }
     32 
     33 /*销毁栈*/
     34 Status destroyStack(linkStack *s){
     35     lNode *p=(*s)->next;
     36     lNode *q;
     37     if(!p){
     38         return OK; 
     39     }
     40     while(p){
     41         q=p;
     42         p=p->next;
     43         free(q);
     44     }
     45     return OK;
     46 }
     47 
     48 /*把S栈置为空栈*/
     49 Status clearStack(linkStack *s){
     50     (*s)->next=NULL; 
     51     return OK;
     52 }
     53 
     54 /*判断栈是否为空栈*/
     55 bool emptyStack(linkStack *s){
     56     if((*s)->next)
     57         return FALSE;
     58     else
     59         return TRUE;
     60 } 
     61 
     62 int stackLength(linkStack *s){
     63     int len=0;
     64     *s=(*s)->next;
     65     while(*s){
     66         *s=(*s)->next;
     67         len++;
     68     }
     69     return len;
     70 }
     71 /*入栈*/ 
     72 Status push(linkStack *s,sElemType e){
     73     lNode *p=(*s);
     74     while(p->next){
     75         p=p->next;
     76     }
     77     p->next=(linkStack)malloc(sizeof(lNode));
     78     p->next->data=e;
     79     p->next->next=NULL;
     80     return OK;
     81 }
     82 
     83 /*出栈*/ 
     84 Status pop(linkStack *s,sElemType *e){
     85     lNode *p=(*s);
     86     lNode *q; 
     87     while(p->next){
     88         q=p;
     89         p=p->next;
     90     }
     91     q->next=NULL;
     92     *e=p->data; 
     93     free(p);
     94     return OK;
     95 } 
     96 
     97 /*得到栈顶元素*/
     98 Status getTop(linkStack *s,sElemType *e){
     99     lNode *p=(*s);
    100     if(!p->next){
    101         printf("栈为空,无法得到栈顶元素
    ");
    102         return ERROR;    
    103     }
    104     
    105     while(p->next){
    106         p=p->next;
    107     }
    108     *e=p->data;
    109     return OK;
    110 } 
    111 
    112 int visit(sElemType c){
    113     printf("%d ",c);
    114     return 1;
    115 }
    116 /*遍历栈*/
    117 Status stackTraverse(linkStack *s,int (*visit)(sElemType)){
    118     linkStack p=(*s)->next; 
    119     while(p){
    120         visit(p->data);
    121         p=p->next;
    122     }
    123     return OK;
    124 }
    125 
    126 int main(){
    127     linkStack S;
    128     initStack(&S);
    129     sElemType e;
    130     for(e=1;e<=5;e++)
    131         push(&S,e); 
    132     printf("
    遍历前:");
    133     stackTraverse(&S,visit);
    134     int i;
    135     for(i=1;i<=1;i++)
    136         pop(&S,&e);
    137     printf("
    弹出%d个元素后:",i-1);
    138     stackTraverse(&S,visit);
    139     getTop(&S,&e);
    140     printf("
    栈顶元素为:%d",e);
    141     clearStack(&S);
    142     if(emptyStack(&S))
    143         printf("
    栈变为空栈了"); 
    144     system("pause");
    145     return 0;
    146 }
  • 相关阅读:
    生产者消费者模型
    查看网络通不通的几种方法
    tomcat在45秒内没有启动,启动超时
    request获取各种路径
    修改web项目发布路径
    web.xml不同版本的头
    Web.xml 错误或异常页面配置
    ModelAndView command
    java初始化顺序
    初始化时的过程
  • 原文地址:https://www.cnblogs.com/gangtiexia/p/4883384.html
Copyright © 2020-2023  润新知