#include//标准函数输出库#include//包含malloc()函数的函数库#defineOK1//宏定义OK为1#defineERROR0//宏定义ERROR为0structNode{intele;structNode*next;};/*顺序表的表示方法*/typedefstruct{structNode*pData;intlength;}LinkedList;/*顺序表的初始化*/LinkedList*InitList(LinkedList*L){if(NULL==L){L=(LinkedList*)malloc(sizeof(LinkedList));//如果链表不存在则开辟空间if(!L){printf("为L申请空间失败!\n");//如果申请失败输出提示语}}L->pData=(structNode*)malloc(sizeof(structNode));//为指针头结点开辟空间if(!L->pData){printf("为L->pData申请空间失败!\n");returnNULL;}else{L->pData->next=NULL;//头结点指向空}L->length=0;//链表长度为0returnL;}/*顺序表的销毁*/intDestroyList(LinkedList*L){-1-intk=1;structNode*p=L->pData->next,*q=L->pData;for(k=1;k<=L->length;k++){free(q);//释放指针q所指向的空间q=p;//p指针顺序后移p=q->next;}free(q);//释放最后结点的内存L->pData=NULL;//把链表地址置空return1;}/*向第i个位置插入值为x的元素,在第一个位置插入数据时i为1*/intInsertElem(LinkedList*L,intx,inti){intk=0;structNode*temp,*head;temp=(structNode*)malloc(sizeof(structNode));//为新插入的结点开辟空间temp->ele=x;//把要插入的值插入到指定位置temp->next=NULL;//节点指向的位置为空head=L->pData;//把链表的头指针赋给headif(!L->pData||i-1>L->length){printf("顺序表或是数据位置有问题,不能插入!");returnERROR;}for(k=1;knext;//找到要插入位置}temp->next=head->next;//要插入位置的节点地址赋给temp->nexthead->next=temp;//把要插入的节点的指针赋给head->nexttemp=NULL;//把temp置空L->length++;//链表长度加1returnOK;}/*按位置删除:删除第i个位置上的元素,第一个位置用1表示*/intDeleteElem(LinkedList*L,inti){intk=0;structNode*head,*temp;if(!L->pData||0==L->length||i>L->length)-2-{returnERROR;}head=L->pData;for(k=1;knext;}temp=head->next;//把要删除的位置的地址赋给temphead->next=head->next->next;//把删除位置的地址赋给它节点的指针域free(temp);//把删除的节点的内存释放temp=NULL;//置空tempL->length--;//表长度减1returnOK;}/*逆转整个顺序表:即把整个顺序里面的元素的顺序反转过来*/intReverseList(LinkedList*L){intk=0;structNode*p,*q;//结点指针if(L->length<=1){returnOK;}p=L->pData->next->next;//指向第2个元素q=p->next;//q指向第3个元素L->pData->next->next=NULL;//将第1个元素的下个指针设为NULL,成为线性表的最后一个元素for(k=2;k<=L->length-1;k++)//最后一个元素单独处理{p->next=L->pData->next;L->pData->next=p;p=q;q=p->next;}//依次把前一节点的地址赋给后一节点的指针域,后一节点的地址赋给头结点的指针域p->next=L->pData->next;//把倒数第二个的地址赋给最后一个节点的指针域L->pData->next=p;//头结点指向最后一个节点returnOK;-3-}/*输出某个数据*/voidPrintNode(structNodex){printf("%d",x.ele);//输出元素的值}/*输出顺序表中的每个元素*/voidPrintList(LinkedList*L){intk=0;structNode*temp=NULL;if(!L->pData||!L){printf("顺序表不存在!\n");return;}if(0==L->length){printf("顺序表是空的!\n");return;}printf("表中的元素有:\n");temp=L->pData;//把链表的头指针赋给tempfor(k=1;k<=L->length;k++){temp=temp->next;PrintNode(*temp);}printf("\n");}/*置空表*/intSetEmpty(LinkedList*L){intk=1;structNode*p=L->pData->next->next,*q=L->pData->next;//p指向第2个元素,q指向第1个元素for(k=2;k<=L->length;k++)//依次置空单链表节点{free(q);//释放指针q指向的节点的空间q=p;//使p指针指向下一节点p=q->next;//使p指针指向下一节点-4-}free(q);//释放指针q指向的尾节点的空间L->length=0;L->pData->next=NULL;//置空指向单链表头节点后一节点...