链栈:
链栈的结构与链表相似
插入与删除等 *** 作都是在链表的头部
所以:链栈是一个以top为头结点,从栈顶指向栈底的单链表
typedef struct node
{
Element element; //数据域
struct node* next; //指向下一个结点
}Stacknode;
typedef struct
{
Stacknode* top; //栈顶指针
int length; //节点个数
}Linkstack;
接下来是代码实现:
#include
#include
typedef struct Element
{
int id;
char name[50];
}Element;
typedef struct node
{
Element element; //数据域
struct node* next; //指向下一个结点
}Stacknode;
typedef struct Linkstack
{
Stacknode* top; //栈顶指针
int length; //节点个数
}Linkstack;
Element elements[]={
{1,"大帅比1"},
{2,"大帅比2"},
{3,"大帅比3"},
{4,"大帅比4"}
};
//初始化栈
void Initlinkstack(Linkstack* linkstack);
//入栈
void Pushlinkstack(Linkstack* linkstack,Element element);
//出栈
void Poplinkstack(Linkstack* linkstack);
//输出
void Printlinkstack(Linkstack* linkstack);
//清空栈
void Clearlinkstack(Linkstack* linkstack);
int main(void)
{
Linkstack linkstack;
Initlinkstack(&linkstack);
int i;
for(i=0;i<4;i++)
{
Pushlinkstack(&linkstack,elements[i]);
}
Printlinkstack(&linkstack);
//出栈
Poplinkstack(&linkstack);
Printlinkstack(&linkstack);
//清空栈
Clearlinkstack(&linkstack);
Printlinkstack(&linkstack);
return 0;
}
//初始化栈
void Initlinkstack(Linkstack* linkstack)
{
linkstack->top = NULL;
linkstack->length = 0;
}
//初始化栈
void Pushlinkstack(Linkstack* linkstack,Element element)
{
//创建一个新节点
Stacknode* newnode = (Stacknode*)malloc(sizeof(Stacknode));
//元素赋值
newnode->element = element;
//新结点的next指向当前栈顶
newnode->next = linkstack->top;
linkstack->top = newnode;
linkstack->length++;
}
//出栈
void Poplinkstack(Linkstack* linkstack)
{
//判断栈是否为空
if(linkstack->length == 0)
{
printf("栈为空\n");
return;
}
//记录出栈前的指针
Stacknode* tempnode = linkstack->top;
//栈顶指针下移一位
linkstack->top = linkstack->top->next;
//释放原来的空间
free(tempnode);
linkstack->length--;
}
//清空栈
void Clearlinkstack(Linkstack* linkstack)
{
while(linkstack->length != 0)
{
if(linkstack->length == 0)//判断栈是否为空
{
printf("栈为空\n");
return;
}
//记录出栈前的指针
Stacknode* tempnode = linkstack->top;
//栈顶指针下移一位
linkstack->top = linkstack->top->next;
//释放原来的空间
free(tempnode);
linkstack->length--;
}
}
//输出
void Printlinkstack(Linkstack* linkstack)
{
Stacknode* temp = linkstack->top;
while(temp)
{
printf("%d %s\n",temp->element.id,temp->element.name);
temp = temp->next;
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)