程序编写要求: 1、 以链表方式实现一个堆栈,堆栈的每个元素(结点)可以存放一个字符串(小于20个字符)

如题所述

#include<stdlib.h>
#include<stdio.h>
#include<string.h>

#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->bottom.str[0] = '\0';
mstcks->bottom.str[LEN-1] = '\0';
mstcks->bottom.next = 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;
}
温馨提示:答案为网友推荐,仅供参考
相似回答