博客地址:http://blog.csdn.net/muyang_ren
栈链数据链接示意图
top为指向最后的节点的指针,栈头为一个NULL空地址
1、头文件
head.h
#ifndef __linkstack_H__ #define __linkstack_H__ #include <stdio.h> #include <stdlib.h> typedef int datatype; typedef struct node{ datatype data; struct node *next; }linkstack, *linkstack_p; extern void linkstack_add(linkstack_p *, int ); //入栈 extern void linkstack_init(linkstack_p * );//初始化表头 extern void linkstack_out(linkstack_p *,int *);//出栈 extern int top_empty(const linkstack_p);//判断地址是否为空 #endif
2、栈链实现函数
linkstack.c
#include "head.h" //设置栈表头为null void linkstack_init(linkstack_p *top){ *top=NULL; } //开辟新的节点 void linkstack_new(linkstack_p *new){ *new=(linkstack_p)malloc(sizeof(linkstack)); if(NULL == *new){ perror("malloc\n"); exit(-1); } } //入栈 void linkstack_add(linkstack_p *top , int n){ linkstack_p new; linkstack_new(&new); new->data = n; //入栈 new->next=*top; *top = new; } //栈为空 int top_empty(const linkstack_p top){ if(top==NULL) return 0; else return 1; } //出栈 void linkstack_out(linkstack_p *top, int *num){ linkstack_p p; p=*top; *num = (*top)->data; //将栈中最后进的数据放进num的地址 *top = (*top)->next; free(p); }
3、实现功能函数
main.c
#include "head.h" //实现 10 进制数转换成 8 进制数 int main(void) { int num, n; char *ch="0"; linkstack_p top; linkstack_init(&top); //初始化双向链表 printf("输入十进数:"); scanf("%d",&num); if(num<0) { ch="-0"; num = -num; } while(num!=0){ linkstack_add(&top,num%8); num=num/8; } printf("八进制数为: %s",ch); while(top_empty(top)){ linkstack_out(&top,&n); printf("%d",n); } printf("\n"); return 0; }
时间: 2024-11-09 02:17:36