#include <stdio.h>
# include<stdlib.h>
#define stacksize 100
typedef int datatype;
typedef struct
{
datatype data[stacksize];
int top;
}seqstack;
typedef struct node{
datatype data;
struct node *next;
}listnode;
typedef listnode *linklist;
linklist head;
linklist p;
int count;
linklist creatlist(int n) //创建链表
{
linklist head;
listnode *p1,*p2;
int i;
head=(linklist)malloc(sizeof(listnode));
head->next=NULL;
p2=head;
printf("Please input the records of the chain!\n"); //输入节点值
for(i=0;i<n;i++)
{
p1=(linklist)malloc(sizeof(listnode));
scanf("%d",&p1->data);
p1->next=p2->next;
p2->next=p1;
p2=p1;
}
return (head);
}
void print(linklist head,int n) //输出链表节点
{
if(head==NULL)
printf("list null!\n");
printf("Now these %d records are:\n",n);
p="head-">next;
printf("%4d",p->data);
count="1";
while(p->next!=NULL)
{
count++;
p="p-">next;
printf("%4d",p->data);
if(!(count%10))
printf("\n");
}
}
datatype push(seqstack *s,int x) //进栈
{
if(s->top==stacksize-1)
{ printf("The stack is overflow!\n");
return 0;}
else
s->data[++s->top]=x;
return (s,x);
}
datatype pop(seqstack *s) //出栈
{
if(s->top==-1)
{printf("the stack is empty!\n");
return 0;
}
else
return (s->data[s->top--]);
}
datatype deleted(linklist head) //腾出空间子函数
{
datatype temp;
linklist p;
p="head-">next;
temp=(p->data);
head->next=p->next;
free(p);
return (temp);
}
void invertedlist(linklist head,int n) //逆置子函数
{
seqstack s;
int i,j,temp;
s.top=-1;
for(i=0;i<n;i++)
{
temp="deleted"(head);
push(&s,temp); //将元素进栈
}
for(i=0;i<n;i++)
{
temp="pop"(&s); //将元素出栈
printf("%5d",temp);
if(!((i+1)%10))
printf("\n");
}
printf("\n");
}
main()
{
linklist head;
int n;
printf("Please input the value of n:\n");
scanf("%d",&n);
head="creatlist"(n);
print(head,n);
printf("\n");
printf("After inverting,the records of the chain are:\n"); //输出逆置结果
invertedlist(head,n);
//system("pause"); //vc++中使用
return 0;
}
文章评论(0条评论)
登录后参与讨论