zoukankan      html  css  js  c++  java
  • 链式栈的基本操作

      1 #include<stdio.h>
      2 #include<string.h>
      3 #include<stdlib.h>
      4 typedef int ElemType;
      5 /*链栈结点*/ 
      6 typedef struct Node{
      7        ElemType data;
      8        struct Node *next;
      9 }LinkStackNode;
     10 /*链栈结构*/
     11 typedef struct{
     12        LinkStackNode *top;
     13        int length;
     14 }LinkStack; 
     15 //初始化链式栈
     16 void InitStack(LinkStack *S){
     17     S->top=NULL;
     18     S->length=0;
     19     printf("初始化成功
    ");
     20 }
     21 //入栈
     22 int Push(LinkStack *S){
     23     int n;
     24     LinkStackNode *x=(LinkStackNode*)malloc(sizeof(LinkStackNode));
     25         if(x==NULL){
     26             return printf("申请空间失败
    "); 
     27         }
     28         printf("请输入你想入栈的数
    ");
     29         scanf("%d",&n);
     30          x->data=n;
     31          x->next=S->top;//插入一个新结点在头部 
     32          S->top=x;//将头结点指针指向该结点 
     33          S->length++;
     34         return printf("入栈成功
    ");
     35 } 
     36 //出栈 
     37 int Pop(LinkStack *S){
     38     if(S->top==NULL){
     39         return printf("栈内以空
    ");
     40     }
     41     int x;
     42     LinkStackNode *temp=S->top;//将temp指针指向头结点; 
     43     //移动栈顶指针
     44     S->top=temp->next;//将头结点指针指向temp指针的下一位 
     45     S->length--; 
     46     x=temp->data;
     47     free(temp); //释放temp 
     48     printf("出栈成功
    ");
     49     printf("出栈的值为%d",x);
     50 }
     51 //获取栈顶 
     52 int GetTop(LinkStack *S){
     53     LinkStackNode *p=S->top;
     54     if(S->top==NULL){
     55     return printf("栈内暂无元素
    ");
     56     } 
     57     return printf("栈顶的数为%d
    ",S->top->data); 
     58 } 
     59 //求栈的长度
     60 int GetLength(LinkStack *S){
     61            int n=1;
     62            LinkStackNode *p=S->top;
     63            while(p->next!=NULL){
     64                 p=p->next;
     65                 n++;
     66            }
     67            return printf("栈长度为%d
    ",n);
     68 } 
     69 int main(){
     70     LinkStack S;
     71     int x;
     72     InitStack(&S);
     73     while(true){
     74   printf("|||||||||||||||||||||||||||||||||||||||||||||||
    ");
     75   printf("||  1:入栈                                  ||
    ");
     76   printf("||  2:出栈                                  ||
    ");
     77   printf("||  3:查看栈顶元素                          ||
    ");
     78   printf("||  4:查看栈长度                            ||
    ");
     79   printf("||  (输入-1退出系统)                         ||
    ");
     80   printf("|||||||||||||||||||||||||||||||||||||||||||||||
    ");
     81         int n;
     82         printf("请输入操作序号:
    ");
     83         scanf("%d",&n);
     84         switch(n){
     85             case 1 :
     86                 Push(&S); 
     87                 break;
     88             case 2 :
     89 //                Pop(&S,&x);
     90 //                printf("出栈的值为%d
    ",x); 
     91                 Pop(&S);
     92                 break;
     93             case 3 :
     94                 GetTop(&S);
     95                 break;     
     96             case 4 :
     97                 GetLength(&S);
     98                 break;     
     99             case -1:
    100                 return 0;            
    101 
    102          }   
    103 }
    104 }
    105  
  • 相关阅读:
    POJ1486 Sorting Slides 二分图or贪心
    POJ2060 Taxi Cab Scheme 最小路径覆盖
    POJ3083 Children of the Candy Corn 解题报告
    以前的文章
    POJ2449 Remmarguts' Date K短路经典题
    这一年的acm路
    POJ3014 Asteroids 最小点覆盖
    POJ2594 Treasure Exploration 最小路径覆盖
    POJ3009 Curling 2.0 解题报告
    POJ2226 Muddy Fields 最小点集覆盖
  • 原文地址:https://www.cnblogs.com/longlonglonglong/p/10984311.html
Copyright © 2011-2022 走看看