配色: 字号:
线性表的基本操作c语言实现
2013-09-09 | 阅:  转:  |  分享 
  
/

1.输入2.修改3.查找4.删除。



/



#include"stdio.h"

#include



typedefcharElemType;



typedefstructLNode

{ElemTypedata;

structLNodenext;

}LinkList;



voidCreatListF(LinkList&L,ElemTypea[],intn)//头插法建表

{

LinkLists;inti;

L=(LinkList)malloc(sizeof(LinkList));

L->next=NULL;

for(i=0;i
{

s=(LinkList)malloc(sizeof(LinkList));

s->data=a[i];

s->next=L->next;

L->next=s;

}

}



voidCreateListR(LinkList&L,ElemTypea[],intn)//尾插法建表

{

LinkLists,r;inti;

L=(LinkList)malloc(sizeof(LinkList));

r=L;

for(i=0;i
{

s=(LinkList)malloc(sizeof(LinkList));

s->data=a[i];

r->next=s;

r=s;

}

r->next=NULL;

}





voidInitList(LinkList&L)//初始化线性表

{

L=(LinkList)malloc(sizeof(LinkList));

L->next=NULL;

}



voidDestroyList(LinkList&L)//销毁线性表

{

LinkListp=L,q=p->next;

while(q!=NULL)

{

free(p);

p=q;

q=p->next;

}

free(p);

}



intListEmpty(LinkListL)//判断线性表是否为空

{

return(L->next==NULL);

}



intListLength(LinkListL)//求线性表的长度

{

LinkListp=L;intn=0;

while(p->next!=NULL)

{

n++;p=p->next;

}

return(n);

}



voidDispList(LinkListL)//输出线性表

{

LinkListp=L->next;

while(p!=NULL)

{

printf("%c",p->data);

p=p->next;

}

}



intGetElem(LinkListL,inti,ElemType&e)//求线性表中某个数据元素值

{

intj=0;

LinkListp=L;

while(j
{

j++;p=p->next;

}

if(p==NULL)

return0;

else

{

e=p->data;return1;

}

}



intLocateElem(LinkListL,ElemTypee)//按元素值查找

{

LinkListp=L->next;

inti=1;

while(p!=NULL&&p->data!=e)

{

p=p->next;i++;

}

if(p==NULL)return(0);

elsereturn(i);

}



intListInsert(LinkList&L,inti,ElemTypee)//插入数据元素

{

intj=0;

LinkListp=L,s;

while(j
{

j++;p=p->next;

}

if(p==NULL)return0;

else

{

s=(LinkList)malloc(sizeof(LinkList));

s->data=e;s->next=p->next;p->next=s;

return1;

}

}



intListDelete(LinkList&L,inti,ElemType&e)//删除数据元素

{

intj=0;

LinkListp=L,q;

while(j
{

j++;p=p->next;

}

if(p==NULL)

return0;

else

{

q=p->next;

if(q==NULL)return0;

e=q->data;

p->next=q->next;

free(q);

return1;

}

}





intmain()

{

ElemTypee,a[5]={''a'',''b'',''c'',''d'',''e''};

LinkListh;



InitList(h);//初始化顺序表h

CreateListR(h,&a[0],5);//依次采用尾插入法插入a,b,c,d,e元素

printf("单链表为:");

DispList(h);printf("\n");//输出顺序表h



printf("该单链表的长度为:");

printf("%d",ListLength(h));printf("\n");//输出顺序表h的长度

if(ListEmpty(h))printf("该单链表为空。\n");

elseprintf("该单链表不为空。\n");//判断顺序表h是否为空



GetElem(h,3,e);printf("该单链表的第3个元素为:");

printf("%c",e);printf("\n");//输出顺序表h的第3个元素

printf("该单链表中a的位置为:");

printf("%d",LocateElem(h,''a''));printf("\n");//输出元素''a''的位置



ListInsert(h,4,''f'');//在第4个元素位置插入''f''素

printf("在第4个元素位置上插入''f''后单链表为:");

DispList(h);printf("\n");//输出顺序表h



ListDelete(h,3,e);//删除L的第3个元素

printf("删除第3个元素后单链表为:");

DispList(h);printf("\n");//输出顺序表h



DestroyList(h);//释放顺序表h

return0;

}



献花(0)
+1
(本文系yangshiquan...首藏)