/*以下是个人的作业原版,难免会有错误,还请各位大神斧正*/
typedef int status;
typedef int Elemtype;
const int ok=1;
const int error=0;
const int overflow=-2;
const int TRUE=1;
const int FALSE=0;
typedef struct LNode{
Elemtype data;
struct LNode *next;
}LNode,*Linklist; //定义单链表的结点类型;
status initlist(Linklist &L) //初始化单链表;
{
//TODO1 生成单链表的头结点;
L=(Linklist)malloc(sizeof(LNode));
L->next=NULL;
return ok;
}
status destroylist(Linklist &L) //销毁单链表;
{ //TODO2
Linklist p,q;
p=L->next;
while(p)
{
q=p->next;
free(p);
}
free(L);
return ok;
}
status listempty(Linklist &L) //判断单链表是否为空;
{ //TODO3
Linklist p=L->next;
if(p==NULL)
return TRUE;
else
return FALSE;
}
int listlength( Linklist L) //求单链表的长度;
{ //TODO
//p先指向第一个结点;
Linklist p=L->next;
//计数器清0;
int count=0;
//当p所指向的结点存在,计数器加1,同时指针下移;
while(p)
{
count++;
p=p->next;
}
//while语句结束时,p移出单链表;
return count; //返回单链表的长度;
}
void clearlist(Linklist &L) //清空单链表;
{
//TODO5
Linklist p;
while(L->next)
{
p=L->next;
L->next=p->next;
free(p);
}
}
void printlist(Linklist L) //输出单链表里的每一个结点;
{
//TODO6
//p指向头结点;
Linklist p;
p=L->next;
//当p指向的结点存在,输出该结点,同时指针下移;
while(p)
{
printf("%d\t",p->data);
p=p->next;
}
}
status getelem(Linklist L,int i,Elemtype &e)//取表中第i个元素放到变量e里;
{
//TODO7
//p首先指向第一个元素
Linklist p;
p=L->next;
int j=0;
//while语句结束时,如果第i个结点存在,p指向它;
while(p->next&&j<i-1)
{
p=p->next;
++j;
}
//否则p指向表尾;
//表中不存在第i个结点或者表为空,返回出错信息;
if(!(p->next)||j>i-1) return error;
e=p->data;
return ok;
}
status listinsert(Linklist &L,int i,Elemtype e)//向表中第i个元素的前面插入元素e;
{ //TODO8
int j=0;
//p首先指向头结点;
Linklist p,s;
p=L;
//如果第i个结点存在,while语句结束时,p指向第i-1个结点;
while(p&&j<i-1)
{
p=p->next;
++j;
}
//否则p指向表尾;
if(!p||j>i-1)
return error;
//生成新的结点;
s=(Linklist)malloc(sizeof(LNode));
//新的结点插入到p指向结点的后面(也就是插入到第i个结点的前面);
s->data=e;
s->next=p->next;
p->next=s;
return ok;
}
status listdelete(Linklist &L,int i,Elemtype &e)//删除表L中第i个元素,结果用e返回. 操作成功返回ok,失败时返回error
{
//TODO9
Linklist p=L,q;
int j=0;
while(p->next&&j<i-1)
{
p=p->next;
++j;
}
if(!(p->next)||j>i-1) return error;
q=p->next;
p->next=q->next;
e=q->data;
free(q);
return ok;
}
单链表的基本操作与实现
最新推荐文章于 2023-04-23 18:03:05 发布