再回首,数据结构——链栈的其它一些操作和应用
2015-05-28 11:10
323 查看
最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会。
希望这些能提供给初学者一些参考。
1.共享栈的实现
//共享栈
#define MaxSize N
typedef struct
{
ElementType elem[MaxSize];
int top1, top2;
}ShareStack;
//入栈 Push(s, e)
void Push (ShareStack *s, ElementType e, int i)
{
if (s->top1+1 == s->top2)
printf("Full");
else if (1 == i)
{
s->top1++;
s->elem[s->top1] = e;
}
else if (2 == i)
{
s->top2--;
s->elem[s->top2] = e;
}
}
//出栈 Pop(s)
ElementType Pop (ShareStack *s, int i)
{
if (1 == i)
{
if (-1 == s->top1)
return (nil);
else
{
e = s->elem[s->top1];
s->top1--;
}
}
if (2 == i)
{
if (MaxSize-1 == s->top2)
return (nil);
else
{
e = s->elem[s->top2];
s->top2++;
}
}
return (e);
}
2.求自然数的阶乘
int Fact (int x)
{
result = 1;
s = (StackNode *)malloc(sizeof(StackNode)); //建立栈的头结点
s->next = NULL;
while (x)
{
p = (StackNode *)malloc(sizeof(StackNode));
p->data = x;
p->next = s->next;
s->next = p;
x--;
}
while (!(s->next))
{
p = s->next;
s->next = p->next;
result *= p->data;
free(p);
}
return result;
}
3.将十进制转换为十进制以下其它进制的数
int Conversion (int n, int d)
{
SeqStack s;
int result = 0;
s.top = -1;
while (n)
{
push(s, n%d);
n / d;
}
while (!StackEmpty(s))
result = result * 10 + pop(s);
return result;
}
希望这些能提供给初学者一些参考。
1.共享栈的实现
//共享栈
#define MaxSize N
typedef struct
{
ElementType elem[MaxSize];
int top1, top2;
}ShareStack;
//入栈 Push(s, e)
void Push (ShareStack *s, ElementType e, int i)
{
if (s->top1+1 == s->top2)
printf("Full");
else if (1 == i)
{
s->top1++;
s->elem[s->top1] = e;
}
else if (2 == i)
{
s->top2--;
s->elem[s->top2] = e;
}
}
//出栈 Pop(s)
ElementType Pop (ShareStack *s, int i)
{
if (1 == i)
{
if (-1 == s->top1)
return (nil);
else
{
e = s->elem[s->top1];
s->top1--;
}
}
if (2 == i)
{
if (MaxSize-1 == s->top2)
return (nil);
else
{
e = s->elem[s->top2];
s->top2++;
}
}
return (e);
}
2.求自然数的阶乘
int Fact (int x)
{
result = 1;
s = (StackNode *)malloc(sizeof(StackNode)); //建立栈的头结点
s->next = NULL;
while (x)
{
p = (StackNode *)malloc(sizeof(StackNode));
p->data = x;
p->next = s->next;
s->next = p;
x--;
}
while (!(s->next))
{
p = s->next;
s->next = p->next;
result *= p->data;
free(p);
}
return result;
}
3.将十进制转换为十进制以下其它进制的数
int Conversion (int n, int d)
{
SeqStack s;
int result = 0;
s.top = -1;
while (n)
{
push(s, n%d);
n / d;
}
while (!StackEmpty(s))
result = result * 10 + pop(s);
return result;
}
相关文章推荐
- 再回首,数据结构——链队列上的其它一些算法
- 数据结构复习——链栈的一些操作以及表达式中的括号是否配对问题
- 再回首,数据结构——链栈上的常见操作
- 数据结构课程设计,五种结构的相关操作和应用
- 数据结构实验项目三:队列的基本操作应用
- B树(B-Tree)的由来、数据结构、基本操作以及数据库索引的应用
- (编程训练)再回首,数据结构——二维数组的操作
- 爹地的实验:实验一: 数据结构实验一线性表的基本操作实现及其应用
- 数据库学习--B树(B-Tree)的由来、数据结构、基本操作以及数据库索引的应用
- 数据结构实现顺序线性表的一些小应用
- 数据结构之树的一些基本操作
- B树(B-Tree)的由来、数据结构、基本操作以及数据库索引的应用
- 链栈的基本操作-数据结构
- 本来从动态壁纸预览页面设置一个动态壁纸回到桌面便可以看到桌面动态壁纸,可以观察得到自己的动态壁纸是否设置成功了(必须知道设置是否成功的结构,因为还有一些操作需要完成)! 但是现在是要在自己的应用中进入
- 数据结构——链栈的基本操作
- 数据结构之顺序栈的一些基本操作
- 数据结构与算法面试题汇编(1)- 链表的操作与应用
- 再回首,数据结构——字符串与数组的常见操作(顺序存储)
- 数据结构之顺序队列和链式队列常用的一些操作
- 再回首,数据结构——顺序栈上的常见操作