概念:
栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈),允许进行操作的一端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素时称为“空栈”。特点 :后进先出(LIFO)。
顺序栈
它是顺序表的一种,具有顺序表同样的存储结构,由数组定义,配合用数组下标表示的栈顶指针top(相对指针)完成各种操作。
栈的定义实现
typedef int datatype;
typedef struct node
{
datatype *data;/*定义栈中数据元素的数据类型*/
int maxlen;/*当前栈的最大元素个数*/
int top;/*指示栈顶位置(数组下标)的变量*/
}SeqStack;
创建栈
SeqStack* Stack_create(int len)
{
SeqStack *s;
s = (SeqStack*)malloc(sizeof(SeqStack));
if(s == NULL)
{
puts("malloc failed");
return NULL;
}
s->data = (datatype*)malloc(sizeof(len*sizeof(datatype)))
{
puts("malloc failed");
return NULL;
}
s->maxlen = len;
s->top = -1;
return s;
}
清空栈
void Stack_clear(SeqStack* s)
{
s->top = -1;
}
判断栈是否空
int Stack_empty(SeqStack* s)
{
return (s->top == -1 ? 1 : 0);
}
进栈
int Stack_push(SeqStack* s,datatype value)
{
if(s->top == s->maxlen-1)
{
puts("stack full");
return -1;
}
s->data = value;
p->next = s->next;
s->next = p;
return 0
}
出栈
datatype Stack_pop(SeqStack* s)
{
s->top--;
return (s->data[s->top+1]);
}
取栈顶元素
datatype Stack_top(SeqStack* s)
{
return (s->data[s->top]);
}
销毁栈
void Stack_free(SeqStack *s)
{
free(s->data);
s->data = NULL;
free(s);
s = NULL;
}
它是顺序表的一种,具有顺序表同样的存储结构,由数组定义,配合用数组下标表示的栈顶指针top(相对指针)完成各种操作。
typedef int datatype;/定义栈中数据元素的数据类型/
typedef struct node
{
datatype data; /数据域/
struct node* next;/* 链接指针域*/
}LinkNode_T, *LinkList;
LinkList stack_create()
{
LinkList s;
s = (LinkList)malloc(sizeof(LinkNode_T));
if(NULL == s)
{
puts(" malloc faliled" );
return NULL;
}
s->data = 0;
s->next = NULL;
return s;
}
int stack_empty(LinkList s)
{
return ( s->next == NULL ? 1 : 0 );
}
int stack_push(LinkList s,datatype value)
{
LinkList p =(LinkList)malloc(sizeof(LinkNode_T));
if(NULL == p)
{
puts("malloc faliled ");
return ERROR;
}
p->data = value;
p->next = s->next;
s->next = p;
return SUCCESS;
}
datatype stack_pop(LinkList s)
{
LinkList p;
datatype ret;
p = s->next;
s->next = p->next;
ret = p->data;
free(p);
p = NULL;
return ret;
}
void stack_clear(LinkList s)
{
LinkList p;
p = s->next;
while(p)
{
s->next= p->next;
printf("%d", p->data);
free(p);
p = s->next;
}
}
datatype stack_top(LinkList s)
{
return (s->next->data);
}
void stack_free(LinkList s)
{
LinkList p;
p = s;
while(p)
{
s = s->next;
printf("%d ",p->data);
free(p);
p = s;
}
puts("");
}