#include<stdioh>
void main()
{
int top=-1;
int s[5]={0};
int i;
top++; //栈顶
for(i=0;i<5;i++)
s[++top]=i; //将0,1,2,3,4进栈
for(i=0;i<5;i++)
printf("%d ",s[top--]);//将4,3,2,1,0出栈
printf("\n");
}
结果就为 4 3 2 1 0
D 才对
如果再仔细推敲这就是典型的文字游戏的狗屁题目了
如果字面理解‘指向’,那当然是指向栈底,因为无论数据是多少,记录规则如何,总是为了确定栈底在什么位置,当全部d出,此时指向必定是栈底
如果‘指向’的含义是此时SP的数据值,那就是D
C是肯定不对的
程序的堆栈可以位于 256 字节数据存储器中的任何位置。堆栈区域用堆栈指针(SP,0x81)SFR 指定。SP 指向最后使用的位置。下一个压入堆栈的数据将被存放在 SP+1,然后 SP加 1。
复位后堆栈指针被初始化为地址 0x07,因此第一个被压入堆栈的数据将被存放在地 0x08,这也是寄存器区 1 的第一个寄存器(R0)。如果使用不止一个寄存器区,SP 应被初始化为数据存储器中不用于数据存储的位置。
#include<stdlibh>
#include<stdioh>
#include<stringh>
#define LEN 21
typedef struct StaElement
{
char str[LEN];
struct StaElement next;
}StaElem, StaBottom;
typedef struct myStack
{
StaBottom top;
StaElem bottom;
int numbers;
}MyStack;
void stackini(MyStack mstcks)
{
mstcks->numbers=0;
mstcks->bottomstr[0] = '\0';
mstcks->bottomstr[LEN-1] = '\0';
mstcks->bottomnext = NULL;
mstcks->top=&mstcks->bottom;
}
void stackpush(MyStack mstcks,char elem)
{
mstcks->top->next=(StaBottom)malloc(sizeof(StaElem));
mstcks->top = mstcks->top->next;
strncpy(mstcks->top->str,elem,LEN-1);
mstcks->numbers++;
}
void stackpop(MyStack mstcks,char elem)
{
StaBottom p = &mstcks->bottom;
strcpy(elem,mstcks->top->str);
while(p != mstcks->top)
{
p=p->next;
}
free(mstcks->top);
mstcks->top = p;
mstcks->top->next = NULL;
mstcks->numbers++;
}
int main()
{
MyStack mstck;
stackini(&mstck);
char str1[LEN]="Hello!",str2[LEN]="Hi!";
printf("str1:%s\nstr2:%s\n",str1,str2);
stackpush(&mstck,str1);
stackpop(&mstck,str2);
printf("str1:%s\nstr2:%s\n",str1,str2);
return 0;
}
代码段如下,望参考!
#include <stdioh>
typedef int datatype;
typedef struct linknode
{
datatype data;
struct linknode next;
}linknode;
//堆栈的创建
linknode linkstack_create()
{
linknode L;
L = (linknode )malloc(sizeof(linknode));
L->next = NULL;
return L;
}
//入栈
int linkstack_push(linknode L,datatype x)
{
linknode p,q=L;
p = (linknode )malloc(sizeof(linknode));
p->data = x;
p->next = q->next;
q->next = p;
return 0;
}
//出栈
int linkstack_pop(linknode L,datatype x)
{
linknode p=L,q;
if(p->next == NULL)
return -1;
q = p->next;
p->next = q->next;
x = q->data;
free(q);
q = NULL;
return 0;
}
//堆栈遍历
void linkstack_display(linknode L)
{
linknode p=L->next;
while(p)
{
printf("%d ",p->data);
p = p->next;
}
}
int main()
{
linknode L;
int a[]={1,3,5,7,9};
int i,ret;
L = linkstack_create();
for(i = 0; i <sizeof(a)/sizeof(int); i++)
linkstack_push(L,a[i]);
linkstack_display(L);
printf("\n");
linkstack_pop(L,&ret);
printf("ret : %d\n",ret);
return 0;
}
以上就是关于编写一个程序来实现堆栈使用一个数组可以存储五个要素全部的内容,包括:编写一个程序来实现堆栈使用一个数组可以存储五个要素、单片机简单的堆栈问题、程序编写要求: 1、 以链表方式实现一个堆栈,堆栈的每个元素(结点)可以存放一个字符串(小于20个字符)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)