我给你改好了,你在case 3里面都没有添加pop函数!
#define MAXSIZE 200
#include <stdioh>
#include <stdlibh>
typedef struct seqstack
{
int data[MAXSIZE];
int top;
}seq_stack,stack_type;
stack_type creat_stack()
{
stack_type s;
if(s=(stack_type)malloc(sizeof(seq_stack)))
{
s->top=0;
printf("\ncreat success!");
}
return(s);
}
int full_stack(stack_type s)
{
if(s->top==MAXSIZE)
return(1);
else
return(0);
}
int emty_stack(stack_type s)
{
if(s->top==0)
return(1);
else
return(0);
}
void push(stack_type s)
{
if(full_stack(s))
{
printf("\nstack is full!");
return;
}
else
printf("\nplease input data:");
scanf("%d",&s->data[s->top]);
s->top++;
printf("\npush success!");
}
void free_stack(stack_type s)
{
free(s);
printf("");
}
int pop(stack_type s,int tmp)
{
if(emty_stack(s))
{
printf("stack is emty!");
return(0);
}
else
{
s->top--;
tmp=s->data[s->top];
return (1);
}
}
void restart_stack(stack_type s)
{
s->top=0;
}
void print_stack(stack_type s)
{
int i=s->top-1;
for(;i<=0;i--)
{
printf("%s ",s->data[s->top]);
}
}
void main()
{
int select,data;
stack_type s;
printf("\n");
printf("\n");
printf(" -------------------------\n");
printf(" | enter 0 to exit stack |\n");
printf(" | enter 1 to creat stack |\n");
printf(" | enter 2 to push stack |\n");
printf(" | enter 3 to pop stack |\n");
printf(" | enter 4 to print stack |\n");
printf(" | enter 5 to restr stack |\n");
printf(" | enter 6 to free stack |\n");
printf(" -------------------------\n");
printf("\n");
scanf("%d",&select);
while(select)
{
switch(select)
{
case 1: s=creat_stack();break;
case 2: push(s); break;
case 3: pop(s, &data);
printf("\nthe data is:");
printf("%d\n",data);
break;
case 4: print_stack(s);break;
case 5: restart_stack(s);break;
case 6: free_stack(s);break;
default : printf("\ninout erro!");
}
printf("\n");
printf("\n");
printf(" -------------------------\n");
printf(" | enter 0 to exit stack |\n");
printf(" | enter 1 to creat stack |\n");
printf(" | enter 2 to push stack |\n");
printf(" | enter 3 to pop stack |\n");
printf(" | enter 4 to print stack |\n");
printf(" | enter 5 to restr stack |\n");
printf(" | enter 6 to free stack |\n");
printf(" -------------------------\n");
printf("\n");
scanf("%d",&select);
}
}
堆栈就是先入后出的数据结构。
如果用c语言来实现的话用个struct
先定义一个栈的节点
struct
node;
typedef
strcut
node
position;
typedef
position
stack;
stack
creat();
void
push(int,stack);
int
pop(stack);
int
top();
struct
node
{
int
element;
position
next;
}
stack
creat()
{
stack
s;
s=malloc(sizeof(struct
node));
s->next==NULL;
}
void
push(int
a,stack
s)
{
position
temp;
temp=malloc(sizeof(struct
node));
temp->element=a;
temp->next=s->next;:
s->next=temp;
}
int
pop(stack
s)
{
int
res=s->next->element;
position
temp=s->next;
s->next=temp->next;
free
temp;
}
int
top(stack
s)
{
return
s->next->element;
}
好啦,先creat()一个栈,再进行push
pop等。程序中忽略了麻烦的错误检测给出了重点,当然还可以添加其他 *** 作。。对了,头文件也要加上。本人还是习惯用c++弄成一个类^_^
#include <stdioh>
#include <malloch>
#define max 10
typedef struct
{
char a[max];
int top;
}qstype;
void init(qstype s)
{
s->top =-1;
}
int push(qstype s,char x)
{
if(s->top >= max)
{
return 0;
}
else
{
s->top ++;
s->a[s->top] = x;
return 1;
}
}
char pop(qstype s)
{
if(s->top < 0)
{
return 0;
}
else
{
return s->a[s->top];
s->top --;
}
}
void print(qstype s)
{
int i;
for(i=0;i<s->top;i++)
printf("%c",s->a[i]);
}
int main(void)
{
char ch;
qstype A,B;
A=(qstype )malloc(sizeof(qstype));
B=(qstype )malloc(sizeof(qstype));//指针没有初始化
init(A);
init(B);
scanf("%c",&ch);
while(ch!='\n')
{
if(push(A,ch) == 0)
break;
scanf("%c",&ch);
}
print(A);
return 0;
}
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除 *** 作,而在表的后端(rear)进行插入 *** 作,和栈一样,队列是一种 *** 作受限制的线性表。进行插入 *** 作的端称为队尾,进行删除 *** 作的端称为队头。
以上是从数据结构角度来看,从 *** 作系统角度来看,所有的数据结构都是对虚拟内存的 *** 作,堆是堆,栈是栈,栈指的是C语言函数所使用的自动有函数回收的虚拟内存空间,而堆则有 *** 作系统堆管理器来管理的那部分虚拟内存,从C语言角度来看,使用malloc函数动态分配的内存,就是堆内存。
>
以上就是关于C语言栈的简单实现全部的内容,包括:C语言栈的简单实现、那位大神能讲下C语言中栈的使用啊、C语言 进栈出栈等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)