1、/* Note:Your choice is C IDE */#include #include #includetypedef struct Nodeint data;struct Node *pNext;NODE, *PNODE;PNODE create_list(void); /创建链表void traverse_list(PNODE); /输出int is_empty(PNODE pHead); /判断是否为空int length_list(PNODE); /计算长度void insert_list(PNODE,int,int); /插入void delete_list(PNODE,i
2、nt,int*);/删除void sort_list(PNODE); /排序void reverse(PNODE); /倒置void delsame(PNODE); /删除重复元素void main()int len,val;PNODE pHead=NULL;pHead= create_list();len=length_list(pHead);printf(“length=%dn“,len);traverse_list(pHead);sort_list(pHead);traverse_list(pHead);insert_list(pHead,6,99);traverse_list(pHea
3、d);sort_list(pHead);traverse_list(pHead);if( is_empty(pHead) )printf(“emptyn“);else printf(“no emptyn“);delete_list(pHead,3,printf(“删除的元素为 %dn“,val);traverse_list(pHead);reverse(pHead);traverse_list(pHead);delsame(pHead);traverse_list(pHead);PNODE create_list()int len;int i;int val;PNODE pNew;/新节点PN
4、ODE pHead;/尾指针PNODE pTail;/头指针pHead=(PNODE)malloc(sizeof(NODE);/为头结点分配空间pTail=pHead;pTail-pNext=NULL;if(NULL= pHead)printf(“分配失败 n“);exit(-1);printf(“请输入您需要生成的链表节点的个数:len=“);scanf(“%d“,for(i=0;idata=val;pTail-pNext=pNew;pNew-pNext=NULL;pTail=pNew;return pHead;void traverse_list(PNODE pHead)PNODE p;p
5、=pHead-pNext;while (NULL != p)printf(“%d “,p-data);p=p-pNext;printf(“n“);return;int is_empty(PNODE pHead)if(NULL=pHead-pNext)return 1;elsereturn 0;int length_list(PNODE pHead)int len=0;PNODE p=pHead;while(NULL!=p-pNext)len+;p=p-pNext;return len;void sort_list(PNODE pHead)/类似于数组排序int i,j,t;PNODE p,q;
6、int len;len=length_list(pHead);for(i=0,p=pHead-pNext;ipNext)for(j=i+1,q=p-pNext;jpNext)if(p-data q-data)t=p-data;p-data=q-data;q-data=t;return;void insert_list(PNODE pHead,int pos,int val)int i=0;PNODE p=pHead;PNODE pNew;while(NULL!=p i+;if(ipos-1 | NULL=p)printf(“插入位置不存在 n“);exit(-1); pNew=(PNODE)m
7、alloc(sizeof(NODE);if(NULL=pNew)printf(“动态分配内存失败 n“);exit(-1);pNew-data=val;pNew-pNext=p-pNext;p-pNext=pNew;void delete_list(PNODE pHead,int pos,int *pVal)int i=0;PNODE q,p=pHead;while(p-pNext!=NULL i+;if(p=NULL | ipos-1)printf(“删除位置不存在 n“);exit(-1);q=p-pNext;p-pNext=q-pNext;*pVal=q-data; free(q);vo
8、id reverse(PNODE pHead)PNODE p,q,s;s=pHead;pHead=pHead-pNext;p=NULL;q=pHead;while(q!=NULL)pHead=pHead-pNext;q-pNext=p;p=q;q=pHead; s-pNext=p;pHead=s; void delsame(PNODE pHead)int a;PNODE p,q,r;p=pHead-pNext;while(p!=NULL)a=p-data;loop:for(q=p;q-pNext!=NULL;q=q-pNext)if(q-pNext-data=a)r=q-pNext;q-pNext=r-pNext;free(r);goto loop;p=p-pNext;