数据结构定义一个栈并实现入栈和出栈 *** 作的程序c语言完整版

数据结构定义一个栈并实现入栈和出栈 *** 作的程序c语言完整版,第1张

如下:

#include "stdio.h"

struct stackNode{

  int data

  struct stackNode *nextPtr

}

typedef struct stackNode LISTSTACK

typedef LISTSTACK *STACKNODEPTR

void push(STACKNODEPTR *,int)

int pop(STACKNODEPTR *)

int isEmpty(STACKNODEPTR)

void printStack(STACKNODEPTR)

void instruct()

int main()

{

     int item

     int choice

     STACKNODEPTR sPtr=NULL

     instruct()

     printf("choose your choice\n")

     scanf("%d",&choice)

     while(choice!=3)

     {

          switch(choice)

          {

               case 1:

               printf("please input an integer!\n")

               scanf("%d",&item)

 春键              //printf("%d\n",item)

               push(&sPtr,item)

               printStack(sPtr)

               break

               case 2:

               if(!isEmpty(sPtr))

               {

                    printf("deleting element of top stack\n")

                    pop(&sPtr)

                    printStack(sPtr)

               }

               else{

                    printf("no element in the stack\n")

               }

               break

               default:

                    printf("invalid input,check your input!\n")

                    break

          }

          printf("pleace choose your choice ")

          instruct()

          scanf("%d",&choice)

     }

}

void instruct()

{

     printf("Following the instruction below:\n"

       扒知巧     "1:insert new elment into the stack\n"

            "2:delete the top element of the stack\n"

            "3:to end of run\n")

}

int isEmpty(STACKNODEPTR sPtr)

{

     return sPtr==NULL

}

void printStack(STACKNODEPTR sPtr)

{

     if(sPtr==NULL)

     {

          printf("The stack is empty!\n")

     }

     else{

          printf("The elements of the stack:\n")

          while(sPtr!=NULL)

          {

               printf("%d-->",sPtr->data)

               sPtr=sPtr->nextPtr

          }

          printf("NULL\n\n")

     }

}

void push(STACKNODEPTR *topPtr,int value)

{

     STACKNODEPTR newPtr

     newPtr=malloc(sizeof(STACKNODEPTR))

     if(newPtr!=NULL)

     {

          newPtr->data=value

          newPtr->nextPtr=*topPtr

          *topPtr=newPtr

     }

     else

     {

          printf("%d is not inserted into stack.No memory is availiable\n")

     }

}

int pop(STACKNODEPTR *topPtr)

{

     STACKNODEPTR newPtr

     int topValue

     newPtr=*topPtr

     *topPtr=(*topPtr)->nextPtr

     free(newPtr)

     topValue=(*topPtr)->data

     printf("deleting--- %d\n",topValue)

     return topValue

}

数据结构:

是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的猛春运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。

常用数据结构:

数组 (Array)、栈 (Stack)、队列 (Queue)、链表 (Linked List)、树 (Tree)、图 (Graph)、堆 (Heap)、散列表 (Hash)

您好:

你是在学习数据结构方面的知识信神吧。

首先呢,你学习栈,要了解栈的定义,明白它是怎么一回事,就是去理解他的思想。

最后才去用代码来体现出来。

栈是先进后出,其实是用代码控制的,

其实你要他先进先出也可以。

你只要明白他的原理就行。

代码,你可以理解为跟计算的一种对话的语言。

不用想的那么复杂。

就好比说话,你只要知道你要说什么就行(算法),而不用刻意明白要怎么说(语法)。

下面给我出我以前写的代码,关于栈的,顺序栈,其实还有链栈。

/*   数据结构-栈   */

/*   异常的细节处理还没弄好*/

#include <iostream>

#include <stdlib.h>

#include <malloc.h>

#define len_chu_shi 50   //初始空间大小

#define len_zeng_jia 10  //额外增加空间大小

#define OK 0       //正确

#define OVER -2     //

#define ERROR -1 冲坦察  //

using namespace std

typedef int elem_type          //元素类型

typedef int function_type      //函数类型

typedef struct zhan

{

   elem_type *top    //栈顶

   elem_type *base   //栈底

   int len           //当前空间大小

}zhan                //栈结构

function_type Init_zhan(zhan *exam)//初始化栈

function_type Get_top(zhan *exam,elem_type *e)//获取栈顶元素

function_type Add_top(zhan *exam,elem_type *e)//增加栈顶元素

function_type Delete_top(zhan *exam, elem_type *e)//删除栈顶元素

int main(int argc,char *argv[])

{

   zhan 散茄*example = (zhan *)malloc(sizeof(zhan))

   Init_zhan(example)

   return OK

}

function_type Init_zhan(zhan *exam)

{

   exam->base = (elem_type *)malloc(len_chu_shi*sizeof(elem_type))

   if(!exam->base)  //分配失败

     exit(OVER)

   exam->top = exam->base

   exam->len = len_chu_shi

   return OK

}//--end

function_type Get_top(zhan *exam,elem_type *e)

{

   if(!exam->base)

     exit(OVER)

   *e = *(exam->top - 1)  //不能用自减运算符,那样会改变栈顶指针的值

   return OK

}//--end

function_type Add_top(zhan *exam,elem_type *e)

{

   if(exam->len <= exam->top - exam->base)  //我个人觉得,如果 已经"<",就已经数据溢出了,就应该报错

     exam->base = (elem_type *)realloc(exam->base,(exam->len + len_zeng_jia)*sizeof(elem_type))

   if(!exam->base)  //分配失败

     exit(OVER)

   *(exam->top++) = *e   //应该是先改变栈顶指针的内容,然后栈顶指针再自增

   exam->len += len_zeng_jia

   return OK

}//--end

function_type Delete_top(zhan *exam, elem_type *e)

{

   if(!exam->base)  //空栈

     exit(OVER)

   *e = *(--exam->top)  //应该是栈顶指针先自减,然后获取栈顶指针的内容

   return OK

}//--end


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12523124.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存