順序棧的實現(數值轉換為例)


include<stdio.h>

include<stdlib.h>

include<string.h>

include<malloc.h>

define STACK_INIT_SIZE 100

define STACKINCREASE 10

define ERROR 0

define OK 1

define OVERFLOW -1

//順序棧的實現(棧的特點是后進先出)
typedef struct
{
int *base;
int *top;
int stacksize;//指申請空間的大小,不是指棧里面元素的數量
}SqStack;

//構造一個空棧
int InitStack(SqStack p)//里面的參數應該帶個星號,但顯示不出來
{
p->base = (int
)malloc(sizeof(int) * STACK_INIT_SIZE);
if (!p->base) exit(OVERFLOW);
p->top = p->base;
p->stacksize = STACK_INIT_SIZE;
return OK;
}

//銷毀棧
int DestoyStack(SqStack *p)
{
if (!p->base) return ERROR;
free(p->base);
p->base = NULL;
p->stacksize = 0;
return OK;
}

//清空棧
int ClearStack(SqStack *p)
{
if (!p->base) return ERROR;
p->top = p->base;
return OK;
}

//檢查棧是否為空
int StackEmpty(SqStack p)
{
if (!p.base) return ERROR;
if (p.top == p.base) return OK;
else return 0;
}

//取棧頂元素(只取不刪)
int GetTop(SqStack p)
{
if (p.top == p.base) return ERROR;
else return *(p.top - 1);
}

//插入元素e到棧頂
int Push(SqStack p, int e)
{
if (p->top - p->base >= p->stacksize)
{
p->base = (int
)malloc(sizeof(int) * (p->stacksize + STACKINCREASE));
if (!p->base) exit(OVERFLOW);
p->stacksize = p->stacksize + STACKINCREASE;
}
(p->top) = e;
p->top++;
return OK;
//
(p->top)++ = e;
}

//刪除棧頂元素
int Pop(SqStack *p)
{
if (p->base == p->top) return ERROR;
p->top--;
return OK;
}

//數值轉換
void conversion()
{
SqStack s;
InitStack(&s);
int n, m;//n是輸入的十進制數,m是需要轉換的進制
scanf_s("%d %d", &n, &m);
while (n)
{
Push(&s, n%m);
n = n / m;
}
while (!StackEmpty(s))
{
printf("%d", GetTop(s));
Pop(&s);
}
}
int main()
{
conversion();
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM