1.建立一个堆栈类模板,其中堆栈数据用链表存放。

2025-05-12 15:02:16
推荐回答(3个)
回答(1):

struct SNode{
char data;
SNode *next;
};

void StackAndQueue::InitialStack(SNode *&top)
{
top = NULL;
}
int StackAndQueue::PushStackNode(char value, SNode *&top)
{
SNode *p = new SNode;
//ナミカマユサスレオ飜ヌキ�ヨナ莎ノケヲ
if(NULL == p)
{
return ALLOT_FILD;
}
p->data = value;
p->next = top;
top = p;
return SUCCESSFUL;
}
int StackAndQueue::PopStackNode(char &cData, SNode *&top)
{
//ナミカマユサハヌキ�ェソユ
if(NULL == top)
{
return SPILL_OVER;
}
SNode *p = top;
cData = p->data;
top = p->next;
delete p;
return SUCCESSFUL;
}
这是我以前写的,自己改成模版吧,下面是一段10进制转8进制的检验程序,不过当时我只检验了数组堆栈,还是需要你自己改一下。

int StackAndQueue::conversion(int number, int &iData)
{
iData = 0;
Stack dataStack;
InitialStack(dataStack);
//ナミカマエヲタ桢・
while(number)
{
//ナミカマハヌキ�・サウノケヲ
if(SUCCESSFUL != PushStack(dataStack, number % 8))
{
return NOP_WANTED;
}
number /= 8;
}
int tmp = 0;
//ナミカマハヌキ��サウノケヲ
while(SUCCESSFUL == PopStack(dataStack, tmp))
{
iData = iData + tmp * pow(10, (dataStack.top + 1));
}
return SUCCESSFUL;
}

如果你想要,我还有数组堆栈以及队列的代码,只不过当时是写的中文注释,现在在日文系统下无法正常显示。
#include

#define SUCCESSFUL 0 //イルラ�ノケヲ
#define ALLOT_FILD -1 //キヨナ萋レエ贲ァーワ
#define NOP_WANTED -2 //テサモミミ靥ェオトス荡・
#define SPILL_OVER -3 //メ邉・

#define StackSize 100 //ヒウミ�サオトラ鋗�ンチソ
#define QueueSize 100 //ヒウミ�モチミオトラ鋗�、カネ

//ヒウミ�サオトス荡ケ
struct Stack{
int data[StackSize];
int top;
};

//チエユサオトスレオ膻荡ケ
struct SNode{
char data;
SNode *next;
};

//ヒウミ�モチミオトス荡ケ
struct Queue{
int data[QueueSize];
int front;
int rear;
};

//チエカモチミオトスレオ膻荡ケ
struct QNode{
char data;
QNode *next;
};

class StackAndQueue
{
public:
StackAndQueue();
virtual ~StackAndQueue();

public:
//ハョス�ニラェーヒス�ニ
int conversion(int number, int &iData);
//ウ�シサッヒウミ�サ
void InitialStack(Stack &dataStack);
//ウ�シサッチエユサ
void InitialStack(SNode *&top);
//ネ・ウミ�サ
int PushStack(Stack &dataStack, int value);
//ウ�ウミ�サ
int PopStack(Stack &dataStack, int &iData);
//ネ・エユサ
int PushStackNode(char value, SNode *&top);
//ウ�エユサ
int PopStackNode(char &cData, SNode *&top);
//ウ�シサッヒウミ�モチミ
void InitialQueue(Queue &dataQueue);
//ウ�シサッチエカモチミ
int InitialQueue(QNode *&front, QNode *&rear);
//ネ・ウミ�モチミ
int PushQueue(Queue &dataQueue, int value);
//ウ�ウミ�モチミ
int PopQueue(Queue &dataQueue, int &iData);
//ネ・エカモチミ
int PushQueueNode(char value, QNode *front, QNode *&rear);
//ウ�エカモチミ
int PopQueueNode(char &cData, QNode *&front, QNode *&rear);

};

回答(2):

才这么点分啊!!那我就少些点啦!
typedef int datatype
void push(pointer s, datatype x)\\进栈的函数\\
{p=(pointer*)malloc(sizeof(node));
p->data=x;
p->next=s->next;
s->next=p;
}
datatype pop(pointer s) \\出栈\\
{if(s->next==null)return(null);
else
{p=s->next;
x=p->data;
s->next=p-next;
free(p);
return(x);
}
}
先写些关键的

回答(3):

struct
SNode{
char
data;
SNode
*next;
};
void
StackAndQueue::InitialStack(SNode
*&top)
{
top
=
NULL;
}
int
StackAndQueue::PushStackNode(char
value,
SNode
*&top)
{
SNode
*p
=
new
SNode;
//ナミカマユサスレオ飜ヌキ?ヨナ莎ノケヲ
if(NULL
==
p)
{
return
ALLOT_FILD;
}
p->data
=
value;
p->next
=
top;
top
=
p;
return
SUCCESSFUL;
}
int
StackAndQueue::PopStackNode(char
&cData,
SNode
*&top)
{
//ナミカマユサハヌキ?ェソユ
if(NULL
==
top)
{
return
SPILL_OVER;
}
SNode
*p
=
top;
cData
=
p->data;
top
=
p->next;
delete
p;
return
SUCCESSFUL;
}
这是我以前写的,自己改成模版吧,下面是一段10进制转8进制的检验程序,不过当时我只检验了数组堆栈,还是需要你自己改一下。
int
StackAndQueue::conversion(int
number,
int
&iData)
{
iData
=
0;
Stack
dataStack;
InitialStack(dataStack);
//ナミカマエヲタ桢・
while(number)
{
//ナミカマハヌキ?・サウノケヲ
if(SUCCESSFUL
!=
PushStack(dataStack,
number
%
8))
{
return
NOP_WANTED;
}
number
/=
8;
}
int
tmp
=
0;
//ナミカマハヌキ??サウノケヲ
while(SUCCESSFUL
==
PopStack(dataStack,
tmp))
{
iData
=
iData
+
tmp
*
pow(10,
(dataStack.top
+
1));
}
return
SUCCESSFUL;
}
如果你想要,我还有数组堆栈以及队列的代码,只不过当时是写的中文注释,现在在日文系统下无法正常显示。
#include

#define
SUCCESSFUL
0
//イルラ?ノケヲ
#define
ALLOT_FILD
-1
//キヨナ萋レエ贲ァーワ
#define
NOP_WANTED
-2
//テサモミミ靥ェオトス荡・
#define
SPILL_OVER
-3
//メ邉・
#define
StackSize
100
//ヒウミ?サオトラ鋗?ンチソ
#define
QueueSize
100
//ヒウミ?モチミオトラ鋗?、カネ
//ヒウミ?サオトス荡ケ
struct
Stack{
int
data[StackSize];
int
top;
};
//チエユサオトスレオ膻荡ケ
struct
SNode{
char
data;
SNode
*next;
};
//ヒウミ?モチミオトス荡ケ
struct
Queue{
int
data[QueueSize];
int
front;
int
rear;
};
//チエカモチミオトスレオ膻荡ケ
struct
QNode{
char
data;
QNode
*next;
};
class
StackAndQueue
{
public:
StackAndQueue();
virtual
~StackAndQueue();
public:
//ハョス?ニラェーヒス?ニ
int
conversion(int
number,
int
&iData);
//ウ?シサッヒウミ?サ
void
InitialStack(Stack
&dataStack);
//ウ?シサッチエユサ
void
InitialStack(SNode
*&top);
//ネ・ウミ?サ
int
PushStack(Stack
&dataStack,
int
value);
//ウ?ウミ?サ
int
PopStack(Stack
&dataStack,
int
&iData);
//ネ・エユサ
int
PushStackNode(char
value,
SNode
*&top);
//ウ?エユサ
int
PopStackNode(char
&cData,
SNode
*&top);
//ウ?シサッヒウミ?モチミ
void
InitialQueue(Queue
&dataQueue);
//ウ?シサッチエカモチミ
int
InitialQueue(QNode
*&front,
QNode
*&rear);
//ネ・ウミ?モチミ
int
PushQueue(Queue
&dataQueue,
int
value);
//ウ?ウミ?モチミ
int
PopQueue(Queue
&dataQueue,
int
&iData);
//ネ・エカモチミ
int
PushQueueNode(char
value,
QNode
*front,
QNode
*&rear);
//ウ?エカモチミ
int
PopQueueNode(char
&cData,
QNode
*&front,
QNode
*&rear);
};