0
点赞
收藏
分享

微信扫一扫

西电数据结构上机题——单链表逆置(用栈实现)


单链表逆置(用栈实现)

#include<stdio.h>
#include<malloc.h>
#include<string.h>
//单链表结构类型定义
typedef char datatype;
typedef struct node
{
datatype data;
struct node *next;
}linklist;
void create(linklist*&);
void print(linklist *);
//定义顺序栈结构类型
const int maxsize=40;
typedef struct
{ datatype elements[maxsize];
int top;
}stack;

void setnull(stack *&);
int length(linklist*);
void printlink(linklist*);
void create(linklist *&,datatype*);
void push(stack*,datatype);
void setnull(stack *&);
void invert(linklist *,stack *&);
datatype pop(stack*);

//栈初始化
void setnull(stack *&s)
{
s=(stack*)malloc(sizeof(stack));
s->top=-1;
}

//顺序栈入栈
void push(stack*s,datatype e)
{
s->top++;
s->elements[s->top]=e;
}

//顺序栈出栈
datatype pop(stack*s)
{
datatype temp;
s->top--;
temp=s->elements[s->top+1];
return temp;
}

int main()
{
linklist*head;
stack *s;
create(head);
setnull(s);
print(head);
invert(head,s);//调用单链表逆置的函数
print(head);
}

void create(linklist*&head)
{
char ch;
linklist *s,*r;
head=(linklist*)malloc(sizeof(linklist));
r=head;
while((ch=getchar())!='\n') // 用回车来标记输出结束
{
s=(linklist*)malloc(sizeof(linklist));
s->data=ch;
r->next=s;
r=s;
}
r->next=NULL;
}

//输出单链表
void print(linklist *head)
{
linklist*p=head->next;
while(p!=NULL)
{
printf("%2c",p->data);
p=p->next;
}
printf("\n");
}

//添加单链表逆置算法
void invert(linklist *head,stack *&s)
{
linklist *p=head->next;
while(p!=NULL)
{
push(s,p->data);
p=p->next;
}
linklist *r=head;
while(s->top!=-1)
{
r=r->next;
r->data=pop(s);
}
r->next=NULL;
}


举报

相关推荐

单链表的就地逆置

0 条评论