C语言栈的简单实现

C语言栈的简单实现,第1张

我给你改好了,你在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语言 进栈出栈等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/10041135.html

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

发表评论

登录后才能评论

评论列表(0条)

保存