正文
建立栈的库函数c语言 c语言有栈的库吗
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
c++里关于栈的函数哪些常用
1、鼠标双击或者右击打开桌面上DEVc++软件建立栈的库函数c语言,让其运行起来。
2、栈是一种应用范围广泛的数据结构建立栈的库函数c语言,适用于各种具有“后进先出”特性的问题。
3、首先构建顺序栈的储存结构。
4、顺序栈的初始化int InitStack(SqStack S)//顺序栈的初始化。
5、入栈int Push(SqStack S,int e)//入栈{if(S.top-S.base==S.stacksize)return 0;*S.top=e;S.top++;return 1;}。
6、最后,倒序输出栈中的单词,就完成建立栈的库函数c语言了。
数据结构实验(用c语言写) 栈的基本操作
//顺序栈
#includestdio.h
#includestdlib.h
#includemalloc.h
#define STACK_INIT_SIZE 100;
#define STACKINCREMENT 10;
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
typedef int ElemType;
int InitStack(SqStack S) //为栈S分配存储空间建立栈的库函数c语言,并置S为空栈
{
int size = STACK_INIT_SIZE;
S.base=(int *)malloc(size*sizeof(ElemType));
if(!S.base)
return 0;
S.top=S.base; //置栈S为空栈
S.stacksize=STACK_INIT_SIZE;
return 1;
}
int GetTop(SqStack S,int e) //若栈不空,则用e返回S建立栈的库函数c语言的栈顶元素
{
if(S.top==S.base) return 0;
e=*(S.top-1);
return 1;
}
int Push(SqStack S, int e) /*进栈函数,将e插入栈S中,并使之成为栈顶元素*/
{ if(S.top-S.base=S.stacksize) /*栈满,追加存储空间*/
{
int stackinvrement = STACKINCREMENT;
S.base=(ElemType *) realloc(S.base,(S.stacksize+stackinvrement)*sizeof(ElemType));
if(!S.base)
return 0; /*存储分配失败*/
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return 1;
}
int Pop(SqStack S,int e)/*出栈函数,若栈S不空,则删除S的栈顶元素,用e返回其值*/
{ if(S.top==S.base) return 0;
e=*--S.top;
return 1;
}
void OutputStack(SqStack S)
{int *q;
q=S.top-1;
for(int i=0;iS.top-S.base;i++)
{
printf("%3d ",*q);q--;}
}
void main()
{
int a,b,c ;
char m;
SqStack s;
InitStack(s);
printf("请输入要进栈的元素个数是:");
scanf("%d",a);
printf("\n请输入要进栈的%d个元素:",a);
for(b=0;ba;b++) {
scanf("%d",c);
Push(s,c); }
do { printf("\n");
printf("*********** 1.输出栈的元素**********\n");
printf("*********** 2.取栈顶元素************\n");
printf("*********** 3.删除栈顶元素**********\n");
printf("*********** 4.退出程序**********\n");
printf("\n请选择一个字符:");
getchar();
scanf("%c",m);
switch(m) {
case '1': printf("\n输出的栈为:");
OutputStack(s);
break;
case '2': GetTop(s,c);
printf("\n栈顶元素为:%d",c);
printf("\n输出的栈为:");
OutputStack(s);
break;
case '3': Pop(s,c);
printf("\n删除的栈顶元素:%d",c);
printf("\n输出的栈为:");
OutputStack(s);
printf("\n");
break;
case '4':break;
default: printf("输入的数字有错,请重新选择!\n"); break;
}
}while(m!='4');
}
//链栈
#includestdio.h
#includestdlib.h
typedef struct SNode
{
int data;
struct SNode *next;
}SNode,*LinkStack;
LinkStack top;
LinkStack PushStack(LinkStack top,int x) //入栈
{
LinkStack s;
s=(LinkStack)malloc(sizeof(SNode));
s-data=x;
s-next=top;
top=s;
return top;
}
LinkStack PopStack(LinkStack top) //退栈
{
LinkStack p;
if(top!=NULL)
{
p=top;
top=top-next;
free(p);
printf("退栈已完成\n");
return top;
}
else printf("栈是空的,无法退栈建立栈的库函数c语言!\n"); return 0;
}
int GetStackTop(LinkStack top) //取栈顶元素
{
return top-data;
}
bool IsEmpty()//bool取值false和true,是0和1的区别,bool只有一个字节,BOOL为int型,bool为布尔型
{
return top==NULL ? true:false;
}
void Print()
{
SNode *p;
p=top;
if(IsEmpty())
{
printf("The stack is empty!\n");
return;
}
while(p)
{
printf("%d ", p-data);
p=p-next;
}
printf("\n");
}
void main()
{
int x,a,b;
char m;
do { printf("\n");
printf("###############链栈的基本操作##################\n");
printf("××××××××1.置空栈××××××××××\n");
printf("××××××××2.进栈×××××××××××\n");
printf("××××××××3.退栈×××××××××××\n");
printf("××××××××4.取栈顶元素××××××××\n");
printf("××××××××5.退出程序×××××××××\n");
printf("##############################################\n");
printf("\n请选择一个字符:");
scanf("%c",m);
switch(m){
case '1':
top=NULL;
printf("\n栈已置空!");
break;
case '2':
printf("\n请输入要进栈的元素个数是:");
scanf("%d",a);
printf("\n请输入要进栈的%d个元素:",a);
for(b=0;ba;b++) {
scanf("%d",x);
top=PushStack(top,x); }
printf("进栈已完成建立栈的库函数c语言!\n");
printf("\n输出栈为:");
Print();
break;
case '3':
printf("\n操作之前的输出栈为:");
Print();
top=PopStack(top);
printf("\n操作过后的输出栈为:");
Print();
break;
case '4':
printf("\n输出栈为:");
Print();
if(top!=NULL)
printf("\n栈顶元素是:%d\n",GetStackTop(top));
else
printf("\n栈是空的,没有元素!");
break;
case '5':break;
default:
printf("\n输入的字符不对,请重新输入!");
break;
}
getchar();
}while(m!='5');
}
用c语言实现栈的建立
#include stdio.h
#include stdlib.h
typedef struct _stack {
int size;
int* base;
int* sp;
} stack;
void init(stack* s, int n)
{
s-base = (int*)malloc(sizeof(int)*n);
s-size = n;
s-sp = s-base;
}
int push(stack* s, int val)
{
if(s-sp - s-base == s-size) {
puts("overflow");
exit(1);
}
return *s-sp++ = val;
}
int pop(stack* s)
{
if(s-sp == s-base) {
puts("underflow");
exit(2);
}
return *--s-sp;
}
int empty(stack* s)
{
return s-sp == s-base;
}
void clean(stack* s)
{
if(s-base)
free(s-base);
}
int main(void)
{
stack s;
int i;
init(s, 100);
for(i = 0; i 10; ++i)
printf("%d ", push(s, i));
putchar('\n');
while(!empty(s))
printf("%d ", pop(s));
clean(s);
return 0;
}
c语言建栈
#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0
typedef char ElemType;
typedef int Status;
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
typedef struct
{
ElemType *base; //在栈构造和销毁之后,base的值为NULL
ElemType *top; //栈顶指针
int stacksize; //当前已分配的存储空间,以元素为单位
}SqStack;
// 构造一个空栈S
Status InitStack(SqStack S)
{
S.base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!S.base) //存储分配失败
exit (OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}//InitStack
/////////////////// 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR /////
Status GetTop(SqStack S,ElemType e)
{
if(S.top==S.base)
return ERROR;
e=*(S.top-1);
return OK;
}//GetTop
////////////////// 插入元素e为新的栈顶元素 /////////////////////////////////////
Status Push(SqStack S,ElemType e)
{
if(S.top-S.base=S.stacksize) //栈满,追加存储空间
{
S.base=(ElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT) * sizeof(ElemType));
if(!S.base)
exit (OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}//Push
////////////////// 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
Status Pop(SqStack S,ElemType e)
{
if(S.top==S.base)
return ERROR;
e=*--S.top;
return OK;
}//Pop
////////// main() //////////////////////////////
void main()
{
int i;
char ch,e,c;
SqStack S;
InitStack(S);
printf("1.Push\t2.Pop\t3.GetTop\t4.exit\n");
while(1)
{
printf("请选择:");
scanf("%d",i);
c=getchar(); //*****接受回车符******
switch (i)
{
case 1:
printf("请输入要插入的元素:");
scanf("%c",ch);
Push(S,ch);
break;
case 2:
printf("弹出栈顶元素:");
Pop(S,e);
printf("%c\n",e);
break;
case 3:
printf("取栈顶元素:");
GetTop(S,e);
printf("%c\n",e);
break;
case 4:
exit(0);
default:
printf("ERROR!Please Reput A Number\n");
}
}
}
请问c语言有没有像c++一样的stack库函数?用来直接使用栈
C语言中包含一些标准的库函数,但是没有像C++中的STL容器那部分全面的结构和函数。
在C语言中如果想使用栈,需要自己编写代码,如果是简单的一次性应用,可以用数组模拟栈的功能,如果是在一个大项目中反复使用,可以自己写一个stack的库函数。
自定义的库函数中,至少应该包含初始化、销毁、入栈、出栈、取栈顶元素、判断栈是否为空等操作。
如何用C语言创建一个链栈,并进行操作
给题主一个包含建栈、入栈、出栈的代码吧
#include stdio.h
#include conio.h
#include stdlib.h
#include string.h
#define elemType int /*元素类型*/
#define status int
#define OVERFLOW -1
#define ERROR 0
#define OK 1
typedef struct sNode {
elemType data;
struct sNode *next;
} sNode;
typedef struct {
sNode *top; /*栈顶指针*/
int length; /*栈中元素个数*/
} *SLink;
/* 初始化 */
/* 操作结果:构造一个空的栈S */
void initStack (SLink *S) {
(*S) - top = NULL; /*栈顶指针的初始值为空*/
(*S) - length = 0; /*栈中元素个数为0*/
}
/* 入栈 */
/* 操作结果:栈S插入元素e */
status push (SLink S, elemType e) {
sNode *p;
p = (sNode*)malloc (sizeof (struct sNode)); /*建立新节点*/
if (!p) /*内存分配失败*/
exit (OVERFLOW);
p-data = e;
p-next = S-top; /*链接到原来的栈顶*/
S-top = p; /*移动栈顶指针*/
++S-length; /*栈的长度增加*/
return OK;
}
/*出栈*/
/* 操作结果:删除栈S栈顶元素,并由e返回其值 */
status pop (SLink S, elemType *e) {
sNode *q;
if (!S-top)
return ERROR;
else {
*e = S-top - data; /*返回栈顶元素*/
q = S-top;
S-top = S-top - next; /*修改栈顶指针*/
--S-length; /*栈的长度减少*/
free (q); /*释放被删除的元素空间*/
return OK;
}
}
/* 输出栈 */
status stackPrint (SLink S) {
sNode *p = S-top; /* p指向栈顶 */
while (p!=NULL) {
printf ("%d\t",p-data);
p = p-next;
}
putchar ('\n');
return OK;
}
int main (void) {
SLink S;
elemType e;
elemType a=1,b=2,c=3,d=4;
initStack (S);
/*入栈若干元素*/
push (S, a);
push (S, b);
push (S, c);
push (S, d);
puts ("入栈4个元素,此时栈内容为:");
stackPrint (S);
/*出栈*/
pop (S, e);
puts ("出栈1个元素,此时栈内容为:");
stackPrint (S);
getch (); /*屏幕暂留*/
return 0 ;
}
运行结果
关于建立栈的库函数c语言和c语言有栈的库吗的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。