什么单链表的逆置 问题描述 设计一个程序,实现单链表的逆置。 一、需求分析 ⑴按程序提示输入并创建一个单链表,带有头结点 ⑵可自定义链表的长度,可自定义链表储存的数据类型,注意更改相应的输入输出方式 ⑶实现单链表的逆置,直观地输出结果 二、概要设计 为实现上述程序功能,需创建以下抽象数据类型: ADT LinkList { 数据对象:D={ai|ai∈(0,1,…,9),i=0,1,2,…,n,n≥0} 数据关系:R={
|ai-1,ai∈D,i=1,2,…,n} 基本操作: InitList(&L) 操作结果:初始化一个链表L。 CreatList(L,L_Length) 初始条件:链表L 已存在。 操作结果:创建一个长度为L_Length 的单链表。 InverseList(L) 初始条件:链表L 已存在。 操作结果:将单链表逆置。 DisplayList(L) 初始条件:链表L 已存在。 操作结果:销毁链表L。 } ADT LinkList 本程序包含四个模块,即 1) 主程序模块,接受命令 2) 初始化及链表创建模块,按要求创建链表 3) 单链表逆置模块,实现单链表的逆置 4) 显示模块,输出结果 三、详细设计(C语句,而非伪码) 1. 元素类型、节点类型和指针类型的定义 typedef int Status;//函数状态类型 typedef int ElemType;//元素类型 typedef struct node{ ElemType data; struct node *next; }Node,*LinkList;//节点类型、 2. 基本操作和所需调用的函数 //初始化一个链表 Status InitList(LinkList *L) { *L=(LinkList)malloc(sizeof(node)); if(!(*L)) exit(-2);//内存分配失败 (*L)->next=NULL; return 1; } //在初始化的基础上按顺序创建一个链表 Status CreatList(LinkList L,int n) { LinkList p=L; int i; for(i=0;inext)=(LinkList)malloc(sizeof(node)); if (!(p->next)) exit(-2);//内存分配失败 scanf("%d",&p->next->data); p=p->next; } p->next=NULL; return 1; } //依次输出单链表中的各个元素 Status DisplayList(LinkList L) { LinkList p; p=L->next; while(p) { printf("%5d",p->data); p=p->next; } printf("\n"); return 1; } //逆置1(递归方法) LinkList Ieverse(LinkList pre, LinkList cur) { LinkList head; if(!cur) return pre; head =Ieverse(cur, cur->next); cur->next = pre; return head; } //逆置2(就地逆置) Status I...