首先是栈的c语言代码
#include <stdio.h>
#include <stdlib.h>
#define MAX 100//数组最大空间
typedef struct
{
char *array;
int top;
int maxsize;//等于MAX
}stack;
int isFull(stack *L)
{
return (L->top == L->maxsize-1);//栈满返回1,否则返回0
}
int isempty(stack *L)
{
return (L->top==-1);//栈为空返回1,否则返回0
}
void initialize(stack *L)//初始化顺序栈
{
L->top=-1;
L->maxsize=MAX;
L->array=(char*)malloc(sizeof(char)*MAX);
if(!L->array)//L->array=NULL
exit(1);
}
char Top(stack *L)//返回栈顶元素的值
{
if(isempty(L))
exit(1);
else
return L->array[L->top];
}
void push(stack *L,char e)//压栈
{
int i;
if(isFull(L))
{
char *oldarr=L->array;
L->array=(char *)malloc(sizeof(char)*2*L->maxsize);//重新分配2倍的空间
for(i=0;i<=L->top;i++){
L->array[i]=oldarr[i];
}
L->maxsize=2*L->maxsize;
free(oldarr);
}
L->array[++L->top]=e;
}
void pop(stack *L)
{
if(L->top==-1){
exit(1);
}
L->top--;
};
void clear(stack*L)
{
L->top=-1;
}
void destory(stack*L)
{
free(L->array);
}
int main()
{
stack S;
char ctemp;
int i;
initialize(&S);//初始化栈
printf("输入8个字符,按输入顺序进栈:");
for(i=1;i<=8;i++){
ctemp=getchar();
push(&S,ctemp);
}
printf("逐个出栈:");
while(!isempty(&S))
{
ctemp=Top(&S);
pop(&S);
printf("%c",ctemp);
}
printf("\n");
destory(&S);
return 0;
}
下面的是链栈代码
#include <stdio.h>
#include <stdlib.h>
typedef char elemType;
typedef struct
{
char data;
struct Node*next;
}Node;
typedef struct
{
Node *Top;//代表栈顶
}linkstack;
void initialize(linkstack *s)//初始化栈,使其为空栈
{
s->Top=NULL;
}
int isempty(linkstack *s)//栈为空返回1,否则返回0
{
return (s->Top==NULL);
}
char top(linkstack *s)
{
if(!s->Top)//栈空
exit(1);
return (s->Top->data);
}
void push(linkstack *s,char e)
{
Node *temp=(Node*)malloc(sizeof(Node));
temp->data=e;
temp->next=s->Top;
s->Top=temp;//链入栈
}
void pop(linkstack *s)
{
Node*temp;
if(!s->Top)
exit(1);
temp=s->Top;
s->Top=s->Top->next;
free(temp);
}
void clear(linkstack *s)
{
Node *temp;
temp=s->Top;
while(temp)
{
s->Top=s->Top->next;
free(temp);
temp=s->Top;
}
}
int main()
{
linkstack s;
char ctemp;
int i;
initialize(&s);
printf("输入8个字符,依次进栈: ");
for(i=1;i<=8;i++)
{
ctemp=getchar();
push(&s,ctemp);
}
printf("将栈中结点逐个出栈: ");
while(!isempty(&s))
{
ctemp=top(&s);
pop(&s);
putchar(ctemp);
}
printf("\n");
return 0;
}
这里的话主要也就是代码,因为仔细看也不难。用的话也可以修改main函数。