1.生成一个单链表
2.输出结点的值
typedef struct LNode{
int key;
struct LNode *next;
}LNode,*List;
//正序生成单链表
void CreateList1(List &L,int n){
L=(List)malloc(sizeof(LNode));
L->next=NULL;
LNode *q=L;
for(int i=1;i<=n;i++)
{
LNode *p=(LNode *)malloc(sizeof(LNode));
scanf("%d",&p->key);
q->next=p;
q=p;
p->next=NULL;
}
return;
}
//逆序生成单链表
void CreateList2(List &L,int n){
L=(LNode *)malloc(sizeof(LNode));
L->next=NULL;
for(int i=0;i<n;i++)
{
LNode *p=(LNode *)malloc(sizeof(LNode));
scanf("%d",&p->key);
p->next=L->next;
L->next=p;
}
return;
}
//正序输出链表print1
void Print1(List L){
LNode *p=L->next;
while(p!=NULL)
{
printf("%d",p->key);
p=p->next;
}
}
//逆序输出单链表(递归法)print2
void Print2(List L){
if(L->next!=NULL)
{
LNode *p=L->next;
Print2(p);
printf("%d",p->key);
}
}
//逆序输出单链表(借助栈)Print3
typedef struct Stack{
int *top;
int *base;
int stacksize;
}Stack;
void InitStack(Stack &S){ //构造一个空栈
S.base=(int *)malloc(INITSTACKSIZE*sizeof(int));
if(!S.base)
exit (OVERFLOW);
S.top=S.base;
S.stacksize=INITSTACKSIZE;
}
int Empty(Stack S){ //判断一个栈是否为空
if(S.base==S.top)
return 1;
else
return 0;
}
void Push(Stack &S,int e) //入栈
{
if((S.top-S.base)>=S.stacksize)
{
S.base=(int *)realloc(S.base,(INITSTACKSIZE+INITSTACKADD)*sizeof(int));
if(!S.base)
exit (OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=INITSTACKADD;
}
*S.top++=e;
}
void Pop(Stack &S,int &e){ //出栈
if(S.base==S.top)
return;
e=*--S.top;
}
void Print3(List L){
Stack S;
InitStack(S);
LNode *p=L->next;
while(p!=NULL)
{
Push(S,p->key);
p=p->next;
}
while(!Empty(S))
{
int e;
Pop(S,e);
printf("%d",e);
}
}