//郝斌数据结构 #include <stdio.h> #include <stdlib.h> #include <stdbool.h> typedef struct Node { int data; //数据域 struct Node *pNext; //指针域 } NODE, *PNODE; //PNODE等价于struct Node * //函数声明 PNODE create_listByEnd(void); PNODE create_listByHead(void); void traverse_list(PNODE pHead); bool is_empty(PNODE pHead); int length_list(PNODE ); bool insert_list(PNODE,int,int); bool delete_list(PNODE,int,int *); void sort_list(PNODE); int main(void) { PNODE pHead = NULL; //等价于struct Node *pHead =NULL; pHead = create_listByHead(); //创建一个非循环单链表,并将该链表的头节点的地址赋值给pHead //sort_list(pHead); traverse_list(pHead); /* if(is_empty(pHead)) { printf("链表为空\n"); } else { printf("链表不空\n"); }*/ int len=length_list(pHead); printf("链表的长度是:%d\n",len); system("pause"); return 0; } PNODE create_listByEnd(void) { int len; //用来存放有效节点的个数 int i; int val; //用来存放用户输入的节点的值 //分配了一个不存放任何数据的头节点 PNODE pHead = (PNODE)malloc(sizeof(NODE)); if (pHead == NULL) { printf("分配失败,程序终止\n"); exit(-1); } PNODE pTail = pHead; pTail->pNext=NULL; printf("请输入您需要生成的链表的节点的个数:len="); scanf("%d", &len); for (i = 0; i < len; i++) { printf("请输入第%d个节点的值:", i + 1); scanf("%d", &val); PNODE pNew = (PNODE)malloc(sizeof(NODE)); if (pNew == NULL) { printf("分配失败,程序终止\n"); exit(-1); } pNew->data=val; pTail->pNext=pNew; pNew->pNext=NULL; pTail=pNew; } return pHead; } PNODE create_listByHead(void) { int len; printf("请输入你要创立节点的个数:\n"); scanf("%d",&len); int num; PNODE head=(PNODE)malloc(sizeof(NODE));//头节点 head->pNext=NULL; for(int i=0;i<len;i++) { PNODE node=(PNODE)malloc(sizeof(NODE)); printf("请输入要存放的值:"); scanf("%d",&num); node->data=num; if(head->pNext) { node->pNext=head->pNext; head->pNext=node; } else { head->pNext=node; node->pNext=NULL; } } return head; } void traverse_list(PNODE pHead) { PNODE p =pHead->pNext; while(p!=NULL) { printf("%d ",p->data); p=p->pNext; } /* for(p=pHead->pNext;p;p=p->pNext) { printf("d\n",p->data); } */ printf("\n"); 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(NULL != p) { len++; p=p->pNext; } return len; } void sort_list(PNODE pHead) { int t; PNODE p,q; //类似于数组 for(p=pHead->pNext;p;p=p->pNext) { for(q=p->pNext;q;q=q->pNext) { if(p->data > q->data) { t=p->data; p->data=q->data; q->data = t; } } } return; } //在pHead所指向链表的第pos个节点的前面插入一个新的节点,该节点的值是val,并且pos的值是从1开始的 bool insert_list(PNODE pHead,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; }
原文:https://www.cnblogs.com/Knightl8/p/12577840.html