一个简单的c语言链式结构的栈

本文详细介绍了链式队列的数据结构实现,包括创建、入队、出队、检查空队列及显示队列元素等核心操作。通过C语言代码示例,深入解析了链式队列的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码分为4部分test.c list.c  head.h  Makefile

list.c

#include"head.h"
//创建一个空的队列
linkqueue squeue_create()
{
   linkqueue L;
   L=(linkqueue)malloc(sizeof(Lnode));
   if(L==NULL)
   {
	  printf("L apply is  failed\n");
	  return NULL;
   }
   L->front=(squeue)malloc(sizeof(queues));
   if(L->front==NULL)
   {
	   printf("front apply is  failed\n");
	   return NULL;
   }
   L->back=(squeue)malloc(sizeof(queues));
   if(L->back==NULL)
   {
	   printf("back apply is  failed\n:");
	   return NULL;
   }
   L->front->next=NULL;
   L->back=L->front;
   return L;
}

//入队列先进先出,所以使用是头插法
int  squeue_push(linkqueue  L, int value)
{
     squeue p;
	 p=(squeue)malloc(sizeof(queues));//申请结点
	 if(p==NULL)
	 {
		 printf("p is a fail\n");
		 return 1;
	 }
     p->date=value;
	 while(L->back->next!=NULL)
	 {
        L->back=L->back->next;
	 }
	 L->back->next=p;
	 p->next=NULL;
	 return 0;
}

//出队列  先进先出使用老办法会使得的最后的指针的变成野指针
int squeue_pop(linkqueue L)
{
	 squeue   p,s;
	 int value;
     //判断队列是否为空
    if(squeue_empty(L))
	 {
        printf("squeue is  emtpy\n");
		return 1;
	 }
    p=L->front;//保存首地址
    s=L->front->next;
	value=s->date;
	free(p);
	p=NULL;
    return value;
}

int squeue_empty(linkqueue L)
{
   return L->front==L->back?1:0;
}

void squeue_show(linkqueue L)
{
    squeue p;
	for(p=L->front->next;p!=NULL;p=p->next)
	{
        printf("%d ",p->date);
	    
	}
	printf("\n");
}

head.h

#ifndef  __HEAD_H
#define  __HEAD_H
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct  queue{
    int date;
	struct queue *next;
}queues,*squeue;

typedef struct  node{
     struct queue * front;
	 struct queue *  back;

}Lnode,*linkqueue;

linkqueue  squeue_create();
int squeue_push(linkqueue L,int value);
int squeue_pop(linkqueue L);
int squeue_empty(linkqueue L);
void squeue_show(linkqueue L);
#endif  

test.c

#include"head.h"
int main(int argc,char *argv[])
{
    linkqueue  L;
	int value;
	L=squeue_create();
	if(L==NULL)
	{
		printf("apply  is  fail\n");
		return 1;
	}
	squeue_push(L,10);
	squeue_push(L,20);
	squeue_push(L,30);
	squeue_push(L,40);
	squeue_push(L,50);
 
	 value=squeue_pop(L);
     printf("%d\n",value);
     
      squeue_show(L);


	return 0;
}

Makefile

CC=gcc
CFLAGS=-c  -O  -Wall
obj=list.o test.o 
yuxiang:$(obj)
	$(CC) -o $@  $^
%*.o:%*.c
	$(CC) $(CFLAGS)  -o  $@  $<
.PHONY:clean 
clean:
	rm -rf  *.o  yuxiang

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值