数据结构--实验1--栈的操作

Posted zongyao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构--实验1--栈的操作相关的知识,希望对你有一定的参考价值。

  1 #include "stdio.h"
  2 #include "malloc.h"
  3 typedef  int datatype;
  4 typedef  struct node   //定义链式栈结构
  5 {    datatype data;
  6     struct node *next;
  7 }StackNode,*LinkStack;
  8 LinkStack  Init_LinkStack()
  9 {  
 10     return NULL;
 11 }
 12 
 13 //入栈   
 14 LinkStack  Push_LinkStack(LinkStack  top, datatype x)         
 15 {    
 16         StackNode *s;
 17         s=new StackNode;
 18         s->data=x;
 19         s->next=top;
 20         top=s;
 21         return top;
 22 }
 23 
 24 //出栈
 25 LinkStack   Pop_LinkStack (LinkStack  top, datatype  *x)
 26 {
 27     StackNode *p;
 28     if(top==NULL)return NULL;
 29     else
 30     {
 31     *x=top->data;
 32     p=top;
 33     top=top->next;
 34     free(p);
 35     return top;
 36     }
 37 
 38 }
 39 void print(LinkStack  top)
 40 {    StackNode  *p=top;
 41     while(p != NULL) 
 42     {
 43         printf("%d->",p->data);
 44         p=p->next;
 45     }
 46 }
 47 //顺序栈
 48 #define MAXSIZE  1024   
 49 typedef  struct
 50 {    datatype  data[MAXSIZE];
 51     int  top;
 52 }SeqStack;
 53 
 54 //顺序栈置空栈:首先建立栈空间,然后初始化栈顶指针。
 55 SeqStack  *Init_SeqStack()
 56 {    SeqStack  *s;
 57     s=new SeqStack;
 58     s->top= -1;  
 59     return s;
 60 }
 61 
 62 //顺序栈判空栈
 63 int Empty_SeqStack(SeqStack *s)
 64 {    if (s->top == -1)  return 1;
 65     else  return 0;
 66 }
 67 
 68 //顺序栈入栈
 69 int Push_SeqStack (SeqStack *s, datatype  x)
 70 {if (s->top == MAXSIZE-1)  return 0; //栈满不能入栈
 71 else {    s->top++;
 72         s->data[s->top]=x;
 73         return 1;
 74     }
 75 }
 76 
 77 //顺序栈出栈
 78 int  Pop_SeqStack(SeqStack *s, datatype *x)
 79 {  
 80     if  (Empty_SeqStack(s))  return 0; //栈空不能出栈 
 81     else  { *x=s->data[s->top];
 82             s->top--;  return 1;        //栈顶元素存入*x,返回
 83           }
 84 }
 85 void conversion(int N,int r)
 86 {    SeqStack  *s;
 87     datatype   x;                         
 88     s=Init_SeqStack();        //初始化栈
 89     printf("
 %d 的十进制数转换成 %d 进制为: ",N,r);
 90     while ( N )                            
 91     {    Push_SeqStack (s,N%r);     //余数入栈 
 92         N=N/r ;                //商作为被除数继续 
 93     }   
 94     while  ( !Empty_SeqStack(s))  
 95     {    Pop_SeqStack (s,&x) ;   
 96         printf(" %d ",x) ;      
 97     }         
 98 }  
 99 void main()
100 {
101     datatype x;
102     int i,j,k;
103     LinkStack top;
104     top=Init_LinkStack();
105     do
106     {
107         printf("



");
108     printf("			 栈的应用子系统
");
109     printf("		*******************************
");
110     printf("		*        1----链式进栈     *
");
111     printf("		*        2----链式出栈    *
");
112     printf("		*        3----链栈显示    *
");
113     printf("		*        4----进制转换    *
");
114     printf("		*        0----返  回    *
");
115     printf("		*******************************
");
116     printf("		 请选择菜单项(0-4):");
117     scanf("%d",&k);
118     getchar();
119     switch(k)
120     {
121     case 1:
122         printf("
   请输入要进栈的数据X:");
123         scanf("%d",&x);
124         top=Push_LinkStack(top,x);
125         break;
126     case 2:
127         Pop_LinkStack(top,&x);
128         break;
129     case 3:
130         printf("
 链式栈的元素有:");
131         print(top);
132         break;
133     case 4: 
134         int N,r;
135         printf("
  请输入一个整数N=");
136         scanf("%d",&N);
137         printf("
 请输入一个要转换的进制数r=");
138         scanf("%d",&r);
139         conversion(N,r);
140         break;
141     
142     }
143         
144     }while(k);
145 }

 

以上是关于数据结构--实验1--栈的操作的主要内容,如果未能解决你的问题,请参考以下文章

栈的操作实验(数据结构)

数据结构--实验1--栈的操作

数据结构实验之栈与队列八:栈的基本操作

栈的应用(括号匹配算法实战)

SDUT-3335_数据结构实验之栈与队列八:栈的基本操作

数据结构实验二 栈的应用——迷宫求解问题(c++版本)