链表实现队列-栈

#include<stdio.h>
#include<stdlib.h>
//定义节点
typedef int data_t;
typedef struct link{
data_t data;
struct link *next;
}link_t;
//定义队列首尾
typedef struct {
link_t *head;
link_t *tail;
}link_queue_t;
//创建队列
link_queue_t *creat_queue()
{
link_queue_t *lqp = NULL;
lqp = malloc(sizeof(link_queue_t));
lqp->head = malloc(sizeof(link_t));
lqp->tail = lqp->head;
lqp->head->next = NULL;
lqp->head->data = -1;
return lqp;
}

//打印

void print(link_queue_t *lqp)
{
link_t *temp  = lqp->head;
while(NULL != temp)
{
printf(" %d ",temp->data);
temp  = temp->next;
}
printf("\n");
return;
}
//添加
int insert(link_queue_t *lqp, data_t *data)
{
link_t *newnode = malloc(sizeof(link_t));
if(NULL != data)
        newnode->data = *data;
       newnode->next = NULL;
        lqp->tail->next = newnode;
       lqp->tail = newnode;
      return 0;
}
//出队列
int output(link_queue_t *lqp,data_t *data)
{
      if(NULL == lqp->head->next)
        return -1;
     link_t *temp = lqp->head->next;
     lqp->head->next = temp->next;
     if(NULL != data)
         *data = temp->data;
     if(NULL == lqp->head->next)
         lqp->tail = lqp->head;
     free(temp);
     return 0;
}
int main()
{
link_queue_t *lqp = creat_queue();
int data  = 10,buf = 0;
for(data = 0; data < 10;data++)
 insert(lqp,&data);
print(lqp);
for(data = 0; data < 5; data++)
{
      output(lqp,&buf);
 printf(" %d ",buf);

printf("\n");
print(lqp);

}

//链表实现栈

#include<stdio.h>
#include<stdlib.h>
typedef int data_t;
typedef struct linkstack{
    data_t data;
    struct linkstack *next;
}linkstack_t;

linkstack_t *creat_linkstack()
{
   linkstack_t *head;
   head = malloc(sizeof(linkstack_t));
   head->next = NULL;
   return head;
}

//入栈

int push_linkstack(linkstack_t *lsp,const data_t *data)
{
    linkstack_t *newnode;
    newnode = malloc(sizeof(linkstack_t));
if(NULL != data)
    newnode->data = *data;
    newnode->next = lsp->next;
    lsp->next = newnode;
    return 0;
}
//出栈
int pop_linkstack(linkstack_t *lsp,data_t *data)
{
if(NULL == lsp->next)
      return -1;
    linkstack_t *temp = lsp->next;
    if(NULL != data)
         *data  = temp->data;
    lsp->next = temp->next;
    free(temp);
    return 0;
}
//获取头数据
int get_top_stack(linkstack_t *lsp,data_t *databuf)
{
    if(NULL == lsp->next)
          return -1;
    if(NULL != databuf)
         *databuf = lsp->next->data;
    return 0;
}
//打印栈信息
void print_stack(linkstack_t *lsp)
{
    printf("top:\n");
while(NULL != lsp->next)
    {
        lsp = lsp->next;
        printf(" %d \n",lsp->data);
    }
    printf("end: \n");
}

int main(int argc, const char *argv[])
{
    linkstack_t *lsp;
    int i;
     data_t buf;
    lsp = creat_linkstack();
    for(i = 0;i < 8;i++){
      push_linkstack(lsp,&i);
    }
    print_stack(lsp);
    for(i = 0 ;i < 10;i ++){
       pop_linkstack(lsp,&buf);
       printf("pop :%d\n",buf);
    }
    print_stack(lsp);
    return 0;
}









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值