栈的基本操作(C语言入栈,出栈,打印栈内元素,打印栈顶元素)

 1建立结构

#include<stdio.h>
#include <stdlib.h>
//define a struct 
//定义一个结构体,也就是节点
typedef struct Node {
	int data;                    // 存储栈内
	struct Node *next;     		//  存储结点的地址
}LNode,*LinkList;

2打印栈内元素

LNode*List_new(LNode*L)
{ LNode*p;
p = (LNode*)malloc(sizeof(LNode));
p=L->next;//因为L是空节点所以L->next传给p
printf("栈内现在元素是\n"); 
do
{printf("%d ",p->data);

p=p->next;//遍历
}while(p!=NULL);}

3入栈(因为栈是先进后出,所以使用头插法进行入栈)

LNode*List_HeadCreate(LNode*L)
{   LNode*p;
int h;
int b;
    L = (LNode*)malloc(sizeof(LNode));
	
	L->next=NULL;
	do{ printf("输入数据\n");
	scanf("%d",&h);
	p=(LNode*)malloc(sizeof(LNode));
	p->data=h;
	p->next=L->next;
	L->next=p;
	printf("是否继续录入数据0/1");
	scanf("%d",&b);
	if(b==0)
	{ break;
	 } 
	}while(1);
	return L;
}

4出栈

图解

代码解析 

LNode*List_printf(LNode*L)
{   int b;
	LNode*p;
	LNode*node=L; 
	LNode*h;
 do {	
		 {p=node->next;
	    
		 
	     printf("栈顶元素%d\n",p->data);
	     
	     printf("是不是要出栈0/1");
	       scanf("%d",&b);
	       if(b==0)
		   {
		   break;
			} 
		else
		{node->next=p->next;
		free(p);
	     p=NULL;
		}
		}
	}while(1);
	return L;
}

5主函数

main(){
	 LNode *L;
    int arr;
	int h=0;
	int select;
	printf("----主菜单----\n"); 
   printf( "--1入栈--\n");
	printf("--2出栈--\n"); 
	printf("--3打印栈内元素--\n");
	printf("--4返回---"); 
	do
	{printf("\n写入选项");
	scanf("%d",&select);
	
  {
 if(select==1)	L = List_HeadCreate(L);//入栈 
  if(select==2)   L=List_printf(L);//出栈 
  if(select==3)    L=List_new(L);//打印栈内元素 
  if(select==4)   {
  {
  printf("欢迎下次使用"); break;}}}}while(1);
}

6完整代码

#include<stdio.h>
#include <stdlib.h>
//define a struct 
//定义一个结构体,也就是节点
typedef struct Node {
	int data;                    // 存储链表数据
	struct Node *next;     		//  存储结点的地址
}LNode,*LinkList;
LNode*List_new(LNode*L)
{ LNode*p;
p = (LNode*)malloc(sizeof(LNode));
p=L->next;
printf("栈内现在元素是\n"); 
do
{printf("%d ",p->data);

p=p->next;
}while(p!=NULL);}
LNode*List_HeadCreate(LNode*L)
{   LNode*p;
int h;
int b;
    L = (LNode*)malloc(sizeof(LNode));
	
	L->next=NULL;
	do{ printf("输入数据\n");
	scanf("%d",&h);
	p=(LNode*)malloc(sizeof(LNode));
	p->data=h;
	p->next=L->next;
	L->next=p;
	printf("是否继续录入数据0/1");
	scanf("%d",&b);
	if(b==0)
	{ break;
	 } 
	}while(1);
	return L;
}
LNode*List_printf(LNode*L)
{   int b;
	LNode*p;
	LNode*node=L; 
	LNode*h;
 do {	
		 {p=node->next;
	    
		 
	     printf("栈顶元素%d\n",p->data);
	     
	     printf("是不是要出栈0/1");
	       scanf("%d",&b);
	       if(b==0)
		   {
		   break;
			} 
		else
		{node->next=p->next;
		free(p);
	     p=NULL;
		}
		}
	}while(1);
	return L;
}
main(){
	 LNode *L;
    int arr;
	int h=0;
	int select;
	printf("----主菜单----\n"); 
   printf( "--1入栈--\n");
	printf("--2出栈--\n"); 
	printf("--3打印栈内元素--\n");
	printf("--4返回---"); 
	do
	{printf("\n写入选项");
	scanf("%d",&select);
	
  {
 if(select==1)	L = List_HeadCreate(L);//入栈 
  if(select==2)   L=List_printf(L);//出栈 
  if(select==3)    L=List_new(L);//打印栈内元素 
  if(select==4)   {
  {
  printf("欢迎下次使用"); break;}}}}while(1);
}

7运行结果

         欢迎大家指出错误 哈!!!

  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
顺序是一种线性数据结构,它具有后进先出(LIFO)的特点。顺序的实现需要一个数组和一个指向栈顶元素的指针。以下是顺序的初始化、判断空、入栈出栈操作的C语言代码: ```c #include <stdio.h> #include <stdlib.h> #define MAX_SIZE 100 typedef struct Stack { int data[MAX_SIZE]; int top; } Stack; // 初始化 void init(Stack *s) { s->top = -1; } // 判断空 int is_empty(Stack *s) { return s->top == -1; } // 入栈 void push(Stack *s, int x) { if (s->top == MAX_SIZE - 1) { printf("Error: stack overflow\n"); exit(1); } s->data[++s->top] = x; } // 出栈 int pop(Stack *s) { if (is_empty(s)) { printf("Error: stack underflow\n"); exit(1); } return s->data[s->top--]; } int main() { Stack s; init(&s); push(&s, 1); push(&s, 2); push(&s, 3); while (!is_empty(&s)) { printf("%d ", pop(&s)); } printf("\n"); return 0; } ``` 在上面的代码中,我们使用了一个结构体来表示,其中包含一个整型数组和一个指向栈顶元素的整型指针。在初始化操作中,我们将栈顶指针初始化为-1,表示为空。在入栈操作中,我们首先判断是否已满,如果满了则输出错误信息并退出程序,否则将元素插入到栈顶。在出栈操作中,我们首先判断是否为空,如果为空则输出错误信息并退出程序,否则弹出栈元素并返回。在主函数中,我们初始化一个,然后依次将元素1、2、3入栈,最后将中的元素依次弹出并输出

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值