# include<stdio.h> # include<malloc.h> # include<stdlib.h> typedef struct Node { int data; struct Node *pNext; }NODE,*PNODE; PNODE create_list(void); void traverse_list(PNODE pHead); bool is_empty(PNODE pHead); int length_list(PNODE pHead); bool insert_list(PNODE pHead,int pos,int val); bool delete_list(PNODE pHead,int pos,int *pVal); void sort_list(PNODE pHead); int main(void) { PNODE pHead=NULL; pHead=create_list(); traverse_list(pHead); int len=length_list(pHead); printf("链表的长度为%d ",len); insert_list(pHead,4,44); traverse_list(pHead); sort_list(pHead); traverse_list(pHead); int val; if(delete_list(pHead,4,&val)) { printf("删除成功,您删除的元素是:%d ",val); } else { printf("删除失败,您删除的元素不存在 "); } traverse_list(pHead); return 0; } PNODE create_list(void) { int len; int i; int val; PNODE pHead=(PNODE) malloc(sizeof(NODE)); if(pHead==NULL) { printf("分配内存失败,程序终止"); exit(-1); } printf("请输入需要生成的链表节点个数:len="); scanf("%d",&len); PNODE pTail=pHead; pTail->pNext=NULL; for(i=0;i<len;i++) { printf("请输入第%d个数据:",i+1); scanf("%d",&val); PNODE pNew=(PNODE) malloc(sizeof(NODE)); if(pNew==NULL) { printf("分配内存失败,程序终止"); exit(-1); } pNew->data=val; pTail->pNext=pNew; pNew->pNext=NULL; pTail=pNew; } return pHead; } void traverse_list(PNODE pHead) { PNODE p=pHead->pNext; while(p !=NULL) { printf("%d ",p->data); p=p->pNext; } printf(" "); return; } bool is_empty(PNODE pHead) { if(pHead->pNext==NULL) return true; else return false; } int length_list(PNODE pHead) { PNODE p=pHead->pNext; int len=0; while(p !=NULL) { len++; p=p->pNext; } return len; } void sort_list(PNODE pHead) { int i,j,t; int len=length_list(pHead); PNODE p,q; for(i=0,p=pHead->pNext;i<len-1;i++,p=p->pNext) { for(j=i+1,q=p->pNext;j<len;j++,q=q->pNext) { if(p->data > q->data) { t=p->data; p->data=q->data; q->data=t; } } } return; } bool insert_list(PNODE pHead,int pos,int val) { int i=0; PNODE p=pHead; while(p !=NULL && i<pos-1) { p=p->pNext; i++; } if(i>pos-1 || p==NULL) return false; PNODE pNew=(PNODE)malloc(sizeof(NODE)); if(pNew==NULL) { printf("动态内存分配失败 "); exit(-1); } pNew->data=val; PNODE q=p->pNext; p->pNext=pNew; pNew->pNext=q; return true; } bool delete_list(PNODE pHead,int pos,int *pVal) { int i=0; PNODE p=pHead; while(p->pNext !=NULL && i<pos-1) { p=p->pNext; i++; } if(i>pos-1 || p->pNext==NULL) return false; PNODE q=p->pNext; *pVal=q->data; p->pNext=p->pNext->pNext; free(q); q=NULL; return true; }