#include<malloc.h>
typedef char ElemType
typedef struct LNode
{ElemType data
struct LNode *next
}LinkList
void CreatListF(LinkList *&L,ElemType a[],int n) //头插法建表
{
LinkList *sint i
L=(LinkList *)malloc(sizeof(LinkList))
L->next=NULL
for(i=0i<ni++)
{
s=(LinkList *)malloc(sizeof(LinkList))
s->data=a[i]
s->next=L->next
L->next=s
}
}
void CreateListR(LinkList *&L,ElemType a[],int n) //尾插法建表
{
LinkList *s,*rint i
L=(LinkList *)malloc(sizeof(LinkList))
r=L
for(i=0i<ni++)
{
s=(LinkList *)malloc(sizeof(LinkList))
s->data=a[i]
r->next=s
r=s
}
r->next=NULL
}
void InitList(LinkList *&L)//初始化线性表
{
L=(LinkList *)malloc(sizeof(LinkList))
L->next=NULL
}
void DestroyList(LinkList *&L) //销毁线性表
{
LinkList *p=L,*q=p->next
while(q!=NULL)
{
free(p)
p=q
q=p->next
}
free(p)
}
int ListEmpty(LinkList *L)//判断线性表是否为空
{
return(L->next==NULL)
}
int ListLength(LinkList *L)//求线性表的长度
{
LinkList *p=Lint n=0
while(p->next!=NULL)
{
n++p=p->next
}
return(n)
}
void DispList(LinkList *L) //输出线性表
{
LinkList *p=L->next
while(p!=NULL)
{
printf("%c",p->data)
p=p->next
}
}
int GetElem(LinkList *L,int i,ElemType &e) //求线性表中某个数据元素值
{
int j=0
LinkList *p=L
while(j<i&&p!=NULL)
{
j++p=p->next
}
if(p==NULL)
return 0
else
{
e=p->datareturn 1
}
}
int LocateElem(LinkList *L,ElemType e)//按元素值查找
{
LinkList *p=L->next
int i=1
while(p!=NULL&&p->data!=e)
{
p=p->nexti++
}
if(p==NULL)return(0)
else return(i)
}
int ListInsert(LinkList *&L,int i,ElemType e) //插入数据元素
{
int j=0
LinkList *p=L,*s
while(j<i-1&&p!=NULL)
{
j++p=p->next
}
if(p==NULL)return 0
else
{
s=(LinkList *)malloc(sizeof(LinkList))
s->data=es->next=p->nextp->next=s
return 1
}
}
int ListDelete(LinkList *&L,int i,ElemType &e) //删除数据元素
{
int j=0
LinkList *p=L,*q
while(j<i-1&&p!=NULL)
{
j++p=p->next
}
if(p==NULL)
return 0
else
{
q=p->next
if(q==NULL)return 0
e=q->data
p->next=q->next
free(q)
return 1
}
}
int main()
{
ElemType e,a[5]={'a','b','c','d','e'}
LinkList *h
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")
else printf("该单链表不为空。\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
return 0
}
常用的线性表的插入,删除,创建,按位置查找,按值查找,排序。其他操作都是基于以上基本操作实现的,你所谓的12个操作:排序有很多方法,插入类,选择类,交换类,归并类,基数排序法等,这些都是线性表的操作。一般本科阶段教学大纲中掌握上面的内容即可。