logo资料库

链式栈的进制转换源代码.docx

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
#define datatype int typedef struct stacknode { int num; datatype data; struct stacknode *pNext; }StackNode; StackNode * init(StackNode * phead);//初始化 StackNode * push(StackNode * phead, int num, datatype data);//进栈 StackNode * pop(StackNode * phead, StackNode * poutdata);//出栈 StackNode * freeall(StackNode * phead);//清空 StackNode * printall(StackNode * phead);//打印 #include #include StackNode * init(StackNode * phead)//初始化 { return NULL; } StackNode * push(StackNode * phead, int num, datatype data)//进栈 { StackNode *pnewnode = (StackNode *)malloc(sizeof(StackNode));//创建节点 类型转换 (StackNode *) 明确解析方式 pnewnode->num = num; pnewnode->data = data; pnewnode->pNext = NULL;//开辟节点并赋值 if (NULL == phead)//空链表,直接连接上 { phead = pnewnode;//连接一个节点 } else { StackNode *p = phead; while (p->pNext!=NULL) { p = p->pNext;//一直向前 } p->pNext = pnewnode;//插入 } return phead;//返回头结点 } //显示节点数据 StackNode * printall(StackNode * phead)
{ if (NULL==phead) { return NULL; } else { } printf("%d printall(phead->pNext);//打印 %d %p %p\n", phead->num, phead->data,phead,phead->pNext); } //出栈 StackNode * pop(StackNode * phead, StackNode * poutdata) { if (NULL==phead) { return NULL;//已经没有元素 if (NULL==phead->pNext) poutdata->num = phead->num; poutdata->data = phead->data;//取出数据 free(phead);//释放内存 phead = NULL;//只有一个节点 return phead; } else { } else { StackNode *p = phead; while (p->pNext->pNext!=NULL) { p = p->pNext;//循环到倒数第二个节点 } poutdata->num = p->pNext->num; poutdata->data = p->pNext->data;//取出数据 free(p->pNext);//释放 p->pNext = NULL; return phead; } } //删除所有节点 StackNode * freeall(StackNode * phead) { if (NULL == phead)
return NULL; { } else { StackNode *p1=NULL, *p2=NULL; p1 = phead;//头结点 while (p1->pNext != NULL) { p2 = p1->pNext;//保存下一个节点 p1->pNext = p2->pNext; free(p2); } free(phead); return NULL; } } #include #include //链式链表 实现十进制数转为二进制数 void main() { printf("请输入数据:"); int num; scanf("%d", &num); StackNode *phead = NULL;//创建一个链式栈的头结点 int T; printf("N 进制:"); scanf("%d",&T); printf("come in:"); while (num) { printf("%d", num % T); phead = push(phead, num%2, 0);//压入数据 num /= T; } printf("\n"); printf("Go out:"); while (phead != NULL) { StackNode *pout = (StackNode *)malloc(sizeof(StackNode)); phead = pop(phead, pout);
printf("%d", pout->num);//出栈 } printf("\n"); system("pause"); }
分享到:
收藏