郁闷!真心听不懂了!敲出代码也是错!百度知道无人解答!不管了,贴出来下午出去散散心!
#include <stdio.h> #include <malloc.h> #include <stdlib.h> typedef struct Node { int data; //数据域 struct Node * pNext; //指针域 }NODE,* PNODE; //NODE等价于struct Node NODE,pNODE等价于struct Node * PNODE create_list(void); void traverse_list(PNODE pHead); bool is_empty(PNODE pHead); int length_list(PNODE); bool insert_list(PNODE,int pos,int val); //在pHead所指的链表的第pos个节点的前面插入一个新的节点,该节点的值是val,并且pos的值从1开始 bool delete_list(PNODE,int,int *); void sort_list(PNODE pHead); //排序 void main() { PNODE pHead = NULL; //等价于struct Node * pHead = NULL pHead = create_list(); //创建一个非循环链表,并将该链表的头地址赋给pHead traverse_list(pHead); } PNODE create_list(void) { int len; int i; int val; //用来临时存放用户输入的结点的值 PNODE pHead = (PNODE)malloc(sizeof(NODE)); if (NULL == pHead) { printf("分配失败,程序终止!\n"); exit(-1); } PNODE pTail = pHead; pTail->pNext = NULL; printf("请输入您需要生成的链表节点个数:len:"); scanf("%d",&len); for(i=0;i<len;len++) { printf("请输入第%d个链表节点的值",i+1); scanf("%d",&val); PNODE pNew = (PNODE)malloc(sizeof(NODE)); if (NULL == pHead) { printf("分配失败,程序终止!\n"); 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 (NULL != p) { printf("%d ",p->data); p = p->pNext; printf("\n"); } return; } bool is_empty(PNODE pHead) { if (NULL == pHead->pNext) return true; else return false; } int length_list(PNODE) { PNODE p= pHead->pNext; int len = 0; while (NULL !=p) { ++len; p = p->pNext; } return len; } void sort_list(PNODE pHead) { int i,j,t,len=0; 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) //类似于数组中的:a[i]>a[j] { t = p->data;//t = a[i]; p->data = q->data;//a[i] = a[j]; q->data = t;//a[j] = t; } } } return; } bool insert_list(PNODE,int pos,int val) { int i = 0; PNODE p = pHead; while (NULL != p&& i<pos-1) { p = p->pNext; ++i; } if (i>pos-1 ||NULL ==p) return false; PNODE pNew = (PNODE)malloc(sizeof(NODE)); if (NULL ==pNew) { printf("动态内存分配失败!\n"); exit(-1); } pNew->data = val; PNODE q = p->pNext; p->pNext = pNew; pNew->pNext = q; return true; } bool delete_list(PNODE,int pos,int * val) { int i = 0; PNODE p = pHead; while (NULL != p&& i<pos-1) { p = p->pNext; ++i; } if (i>pos-1 ||NULL ==p) return false; PNODE q = p->pNext; *pVal = q->data; //删除p节点后面的结点 PNODE q = p->pNext->pNext; free(q); q = NULL; return true; }