熟悉鏈式棧
利用鏈式棧來實現10進位制數轉換8進位制。
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
}nodelist,*mylist;
//定義一個結點
typedef struct stack
{
mylist top;//一個結點指標,指向棧頂元素
int size;//棧的元素
}stack,*mystack;
定義一個棧
mystack *init_stack(void)
{
mystack s=malloc(sizeof(stack));//分配·棧空間
if(s!=NULL)
{
s->top=NULL;//一開始先讓棧頂指標指向空。
s->size=0;//棧的個數為0;
}
return s;
}
mylist *newnode(int data)
{
mylist new=malloc(sizeof(nodelist));//分配一個結點空間
if(new!=NULL)
{
new->data=data;//結點資料
new->next=NULL;
}
return new;
}
void push(mystack s,int data)
{
mylist new=newnode(data);得到新結點
new->next=s->top;//將新結點指向棧頂
s->top=new;將棧頂指向新節點
++s->size;
//printf("---push");
}
大概流程看下圖吧(將c結點插入棧頂)
void pop(mystack s,int *p)
{ mylist tmp;//定義一個結構體指標,來儲存棧頂指標。
tmp=s->top;
*p=tmp->data;//p儲存棧頂元素
s->top=tmp->next;//將棧頂下移
--s->size;//元素減一
printf("%d",*p);
//printf("---pop");
}
int main()
{ int n;
int *p;
printf("請輸入:\n");
scanf("%d",&n);
mystack s=init_stack();
while(n>0)
{
push(s,n%8);
n/=8;
}
while(s->size!=0)
{
pop(s,p);
}
return 0;
}