詳解c/c++鏈式堆棧描述進制轉換問題示例
更新時間:2021年11月18日 10:50:49 作者:xr415
這篇文章主要為大家介紹了c/c++鏈式堆棧描述進制轉換問題示例解析有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
基礎操作需要創(chuàng)建鏈表來存儲數(shù)據
使用尾插法和尾刪法來表示棧中的入棧和出棧
typedef struct node
{
int data;
struct node* next;
}Node,*LPNode;
LPNode creatnode(int data)
{
LPNode newnode = (LPNode)malloc(sizeof(Node));
assert(newnode);
newnode->data = data;
newnode->next = NULL;
return newnode;
}
void insertbytail(LPNode &head,int data)
//這里要么傳引用要么傳二級指針因為這里head賦值并沒有對主函數(shù)里面的head改變
{
if (head == NULL)
{
head = creatnode(data);
}
else
{
LPNode newnode = creatnode(data);
LPNode pmove = head;
while (pmove->next!=NULL)
{
pmove = pmove->next;
}
pmove->next = newnode;
}
}
void deletetail(LPNode head)
{
LPNode pronode = head;
if (head == NULL)
{
return;
}
LPNode posnode = head->next;
if (pronode->next == NULL)
{
cout << pronode->data;
free(pronode);
return;
}
while (posnode->next!= NULL)
{
pronode = posnode;
posnode = posnode->next;
}
cout << posnode->data ;
free(posnode);
pronode->next = NULL;
}
創(chuàng)建棧結構
typedef struct stack
{
int top;//用來判斷是否為空
LPNode head;
}Stack,*LPStack;
//描述一個棧的最初始的狀態(tài)
LPStack creatstack()
{
LPStack stack = (LPStack)malloc(sizeof(Stack));
assert(stack);
stack->top = 0;
stack->head = NULL;
return stack;
}
出棧入棧就是表現(xiàn)為鏈式結構的表尾插入和刪除
void push(LPStack stack,int data)
{
insertbytail(stack->head, data);
stack->top++;
}
void pop(LPStack stack)
{
deletetail(stack->head);
stack->top--;
}
判斷棧是否為空即判斷 top==0
bool empty(LPStack stack)
{
return stack->top == 0;
}
代碼實現(xiàn)
int main()
{
LPNode head = NULL;
LPStack stack = creatstack();
int n;
int num;
cin >> num;//表示數(shù)
cin >> n;//表示進制
while (num)
{
push(stack,num%n );
num /= n;
}
while (!empty(stack))
{
pop(stack);
}
return 0;
}
以上就是c/c++鏈式堆棧描述進制轉換問題示例解析的詳細內容,更多關于c/c++鏈式堆棧描述進制轉換的資料請關注腳本之家其它相關文章!

