/**********************************************************************
程序作者:冰糖
章 节:第一次上机
题 号:2.2 链式
题 目:设元素值为整型的线性表L,分别采用顺序结构和链式结构存储,
编写程序,实现线性表的就地逆置(习题集P18 2.21, 2.22)。
最后修改日期:2019年10月19日
***********************************************************************/
#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OK 1
typedef int Position;
typedef int ElemType;
typedef int Status;
typedef struct LNode
{
ElemType data;
Position length;
struct LNode *next;
}LNode,*LinkList;
Status InitList(LinkList &L);
Status ReverseList(LinkList &L);
Status ListInsert(LinkList &L,int i,ElemType e);
Status GetElem(LinkList L,int i,ElemType &e);
int main()
{
LinkList L;
ElemType e;
int i,t=0;
InitList(L);//建立线性链表
for(i=1;i<6;i++)
{
ListInsert(L,i,i);
t++;
}
for(i=0;i<t;i++)
{
GetElem(L,i+1,e);
printf("%d\n",e);
}
printf("************************************逆转后:\n");
ReverseList(L);
for(i=0;i<t;i++)
{
GetElem(L,i+1,e);
printf("%d\n",e);
}
return 0;
}
Status InitList(LinkList &L)
//建立一个空表
{
L=(LNode*)malloc(sizeof(LNode));
L->next=NULL;
return OK;
}
Status ListInsert(LinkList &L,int i,ElemType e)
//i前插入新的元素e,l的长度+1
{
LinkList p;
p=L;
int count=0;//计数
while(p&&count<i-1)
{
p=p->next;
++count;
}
if(!p||count>i-1)
return ERROR;
LinkList s;
s=(LNode*)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
Status GetElem(LinkList L,int i,ElemType &e)
//用e返回L中第i个数据元素的值
{
LinkList p=L;
int count=0;//count用于标记当前元素位序
while(p)
{
p=p->next;
count++;
if(count==i)
{
e=p->data;
return OK;
}
}
if(count>i)
return ERROR;
}
Status ReverseList(LinkList &L)
{
int i;
LinkList p,q;
p=L;
q=p->next;
p->next=NULL;//将最开始的头结点变为终端结点
while(q)
{
p=q;
q=q->next;
p->next=L->next;
L->next=p;//依次将终端结点变为开始结点
}
return OK;
}
数据结构 上机1 2.2链式结构实现线性表就地逆置,设元素值为整型的线性表L,分别采用顺序结构和链式结构存储,编写程序,实现线性表的就地逆置。
最新推荐文章于 2023-04-02 19:51:57 发布