怎样在C语言创建线性表?

Python044

怎样在C语言创建线性表?,第1张

#include"stdio.h"\x0d\x0a#include\x0d\x0a \x0d\x0atypedef char ElemType\x0d\x0a \x0d\x0atypedef struct LNode\x0d\x0a{ElemType data\x0d\x0astruct LNode *next\x0d\x0a}LinkList\x0d\x0a \x0d\x0avoid CreatListF(LinkList *&L,ElemType a[],int n) //头插法建表\x0d\x0a{\x0d\x0a LinkList *sint i\x0d\x0a L=(LinkList *)malloc(sizeof(LinkList))\x0d\x0a L->next=NULL\x0d\x0a for(i=0idata=a[i]\x0d\x0a s->next=L->next\x0d\x0a L->next=s\x0d\x0a }\x0d\x0a}\x0d\x0a \x0d\x0avoid CreateListR(LinkList *&L,ElemType a[],int n) //尾插法建表\x0d\x0a{\x0d\x0a LinkList *s,*rint i\x0d\x0a L=(LinkList *)malloc(sizeof(LinkList))\x0d\x0a r=L\x0d\x0a for(i=0idata=a[i]\x0d\x0a r->next=s\x0d\x0a r=s\x0d\x0a }\x0d\x0a r->next=NULL\x0d\x0a}\x0d\x0a\x0d\x0avoid InitList(LinkList *&L)//初始化线性表\x0d\x0a{\x0d\x0a L=(LinkList *)malloc(sizeof(LinkList))\x0d\x0a L->next=NULL\x0d\x0a}\x0d\x0a \x0d\x0avoid DestroyList(LinkList *&L) //销毁线性表\x0d\x0a{\x0d\x0a LinkList *p=L,*q=p->next\x0d\x0a while(q!=NULL)\x0d\x0a {\x0d\x0a free(p)\x0d\x0a p=q\x0d\x0a q=p->next\x0d\x0a }\x0d\x0a free(p)\x0d\x0a}\x0d\x0a \x0d\x0aint ListEmpty(LinkList *L)//判断线性表是否为空\x0d\x0a{\x0d\x0a return(L->next==NULL)\x0d\x0a}\x0d\x0a \x0d\x0aint ListLength(LinkList *L)//求线性表的长度\x0d\x0a{\x0d\x0a LinkList *p=Lint n=0\x0d\x0a while(p->next!=NULL)\x0d\x0a {\x0d\x0a n++p=p->next\x0d\x0a }\x0d\x0a return(n)\x0d\x0a}\x0d\x0a \x0d\x0avoid DispList(LinkList *L) //输出线性表\x0d\x0a{\x0d\x0a LinkList *p=L->next\x0d\x0a while(p!=NULL)\x0d\x0a {\x0d\x0a printf("%c",p->data)\x0d\x0a p=p->next\x0d\x0a }\x0d\x0a}\x0d\x0a \x0d\x0aint GetElem(LinkList *L,int i,ElemType &e) //求线性表中某个数据元素值\x0d\x0a{\x0d\x0a int j=0\x0d\x0a LinkList *p=L\x0d\x0a while(jnext\x0d\x0a }\x0d\x0a if(p==NULL)\x0d\x0a return 0\x0d\x0a else\x0d\x0a {\x0d\x0a e=p->datareturn 1\x0d\x0a }\x0d\x0a}\x0d\x0a \x0d\x0aint LocateElem(LinkList *L,ElemType e)//按元素值查找\x0d\x0a{\x0d\x0a LinkList *p=L->next\x0d\x0a int i=1\x0d\x0a while(p!=NULL&&p->data!=e)\x0d\x0a {\x0d\x0a p=p->nexti++\x0d\x0a }\x0d\x0a if(p==NULL)return(0)\x0d\x0a else return(i)\x0d\x0a}\x0d\x0a \x0d\x0aint ListInsert(LinkList *&L,int i,ElemType e) //插入数据元素\x0d\x0a{\x0d\x0a int j=0\x0d\x0a LinkList *p=L,*s\x0d\x0a while(jnext\x0d\x0a }\x0d\x0a if(p==NULL)return 0\x0d\x0a else\x0d\x0a {\x0d\x0a s=(LinkList *)malloc(sizeof(LinkList))\x0d\x0a s->data=es->next=p->nextp->next=s\x0d\x0a return 1\x0d\x0a }\x0d\x0a}\x0d\x0a \x0d\x0aint ListDelete(LinkList *&L,int i,ElemType &e) //删除数据元素\x0d\x0a{\x0d\x0a int j=0\x0d\x0a LinkList *p=L,*q\x0d\x0a while(jnext\x0d\x0a }\x0d\x0a if(p==NULL)\x0d\x0a return 0\x0d\x0a else\x0d\x0a {\x0d\x0a q=p->next\x0d\x0a if(q==NULL)return 0\x0d\x0a e=q->data\x0d\x0a p->next=q->next\x0d\x0a free(q)\x0d\x0a return 1\x0d\x0a }\x0d\x0a}\x0d\x0a\x0d\x0aint main()\x0d\x0a{\x0d\x0a ElemType e,a[5]={'a','b','c','d','e'}\x0d\x0a LinkList *h\x0d\x0a \x0d\x0a InitList(h) //初始化顺序表h\x0d\x0a CreateListR(h,&a[0],5)//依次采用尾插入法插入a,b,c,d,e元素\x0d\x0a printf("单链表为:")\x0d\x0a DispList(h) printf("\n")//输出顺序表h\x0d\x0a \x0d\x0a printf("该单链表的长度为:")\x0d\x0a printf("%d",ListLength(h))printf("\n") //输出顺序表h的长度\x0d\x0a if(ListEmpty(h)) printf("该单链表为空。\n") \x0d\x0a else printf("该单链表不为空。\n") //判断顺序表h是否为空\x0d\x0a \x0d\x0a GetElem(h,3,e)printf("该单链表的第3个元素为:")\x0d\x0a printf("%c",e)printf("\n") //输出顺序表h的第3个元素\x0d\x0a printf("该单链表中a的位置为:")\x0d\x0a printf("%d",LocateElem(h,'a'))printf("\n") //输出元素'a'的位置\x0d\x0a \x0d\x0a ListInsert(h,4,'f') //在第4个元素位置插入'f'素\x0d\x0a printf("在第4 个元素位置上插入'f'后单链表为:")\x0d\x0a DispList(h)printf("\n") //输出顺序表h\x0d\x0a \x0d\x0a ListDelete(h,3,e) //删除L的第3个元素\x0d\x0a printf("删除第3个元素后单链表为:")\x0d\x0a DispList(h)printf("\n") //输出顺序表h\x0d\x0a \x0d\x0a DestroyList(h)//释放顺序表h\x0d\x0a return 0\x0d\x0a}

线性表有两种,不知你要求那种

typedef

struct

{

ElemType*

elem

int

length

int

listsize

}

SqList//顺序表,这个与数组的区别不用我说了吧

void

InitList_Sq

(SqList&

l)

{

l.elem=new

ElemType

[LIST_INIT_SIZE]

l.length=0

l.listsize=LIST_INIT_SIZE

}//初始化顺序表

然后SqList

La

InitList_Sq(La)

就可以

typedef

struct

Lnode{

int

data

struct

Lnode

*next

}Lnode,*LinkList//线性链表

//单链表可以有效的利用主存的碎片,它的数据域不是连续的