C语言实现链栈的创建和基本操作(初始化,进栈,出栈等等)
往期文章:
今天闲来无事,就水一篇文章。关于链栈的创建和各项基本操作的,和链表真的很像,主要记住栈是先进后出的规则就行。
- 链栈的结构定义
#include<stdio.h>
#include<stdlib.h>
typedef struct node{//链栈的结构定义
int data;//数据域
struct node *next;//指针域
}node;
- 链栈的初始化
返回值是一个指针。
node *start(node *l){//链栈的初始化 本方法返回的是指针
l=(node *)malloc(sizeof(node));//为链栈分配内存空间
l->next=NULL;//初始化为空栈
return l;
}
- 链栈的创建
要注意给新建的指针p分配内存空间,否则程序会出错。
void create(node *l){//创建一个新的链栈
node *p;//新建指针p
int i=1;
int j;
while(i!=0){
scanf("%d",&j);
if(j!=-1){
p=(node*)malloc(sizeof(node)); //一定要给p分配空间,否则程序运行出错
p->data=j;
p->next=l->next;
l->next=p;//类似于头插法 因为栈结构就是先进后出的
}
else{
i=0;//输入-1时结束
}
}
}
- 链栈的进栈操作
void push(node *l,int e){//链栈的进栈操作
node *p;//新建指针p
p=(node*)malloc(sizeof(node)); //一定要给p分配空间,否则程序运行出错
p->data=e;
p->next=l->next;//头插法入栈
l->next=p;
printf("元素%d进栈!\n",p->data);
}
- 链栈的出栈操作
void pop(node *l){//链栈的出栈操作
node *p;//新建指针p
p=l->next;
if(p==NULL){
printf("该链栈为空,无法出栈!\n");
}else{
int e;
e=p->data;
printf("元素%d出栈!\n");
l->next=p->next;//删除结点p
free(p);
}
}
- 链栈的打印
void print(node *l){
node *p;
p=l->next;
if(p==NULL) {
printf("该链栈为空,无法打印!\n");
}
else{
printf("该链表的内容为:");
while(l->next!=NULL){
printf("%d ",l->next->data);
l=l->next;
}
printf("\n");
}
}
主函数
int main(){
node *p;
p=start(p);
printf("链栈初始化成功!\n");
printf("请输入新链栈的值:\n");
create(p);
print(p);
push(p,1);
print(p);
pop(p);
print(p);
}
运行截图:
总结
今天事情好多啊,还有数据结构的作业要写,真累真累。下一篇写队列,就这样先定了。加油,努力,哎哎哎。