如何用C语言创建一个链栈,并进行操作
发布网友
发布时间:2022-04-26 14:59
我来回答
共1个回答
热心网友
时间:2023-10-10 18:57
给题主一个包含建栈、入栈、出栈的代码吧
#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 ;
}
运行结果