如下:
#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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)