使用函数操作链表
1:计算链表中结点的个数:定义一个Length_list()函数用于计算链表中结点的个数
函数代码:
//计算链表中结点的个数 void Length_list(PNODE pHead) { PNODE p = pHead->pNext; int len = 0; while(NULL != p) { len++; p = p->pNext; } printf("这条链表中有%d个结点\n",len); }
2判断链表是否为空:定义一个Is_empty()函数用于判断链表是否为空
函数代码:
//判断链表是否为空 void Is_empty(PNODE pHead) { if(NULL == pHead->pNext) { printf("链表为空!\n"); } else { printf("链表不为空!\n"); } }
3:对链表中的数据排序:定义一个Scort_list()函数用于对链表中的数据排序
//对链表中的数据排序 void Sort_list(PNODE pHead) { int temp;//中间变量 PNODE p, q; for(p = pHead; NULL != p; p=p->pNext) { for(q=p->pNext; NULL != q; q=q->pNext) { if(p->data > q->data) { temp = p->data; p->data = q->data; q->data = temp; } } } }
程序的所有代码:
#include <stdio.h> #include <stdlib.h> typedef struct Node//结点结构 { int data;//数据域 struct Node *pNext;//指针域 }NODE, *PNODE; //创建链表 PNODE Create_list(void); //遍历链表 void Traverse_list(PNODE pHead); //判断链表是否为空 void Is_empty(PNODE pHead); //计算链表中结合的个数 void Length_list(PNODE pHead); //对链表中的数据排序 void Sort_list(PNODE pHead); void main() { PNODE pHead = NULL; pHead = Create_list();//创建一个非循环单链表 Traverse_list(pHead);//遍历链表 Is_empty(pHead);//判断链表是否为空 Length_list(pHead);//计算链表的长度 Sort_list(pHead);//对链表中的结点排序 Traverse_list(pHead);//遍历输出链表中的数据 system("pause"); } //创建链表 PNODE Create_list(void) { int len;//结点的个数 int val;//临时保存结点的值 //分配一个不存放有效数据的头结点 PNODE pHead = (PNODE)malloc(sizeof(NODE)); if(NULL == pHead) { printf("内存分配失败,程序终止!"); exit(-1); } //定义一个永远指向尾结点的结点 PNODE pTail = pHead; pTail->pNext = NULL; printf("请输入您需要生成的链表的结点的个数:"); scanf("%d",&len); for(int i=0; i<len; i++) { printf("请输入第%d个结点的值:", i+1); scanf("%d",&val); //创建一个临时结点 PNODE pNew = (PNODE)malloc(sizeof(NODE)); if(NULL == pNew) { 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(NULL != p) { printf("%d ", p->data); p = p->pNext; } printf("\n"); return; } //判断链表是否为空 void Is_empty(PNODE pHead) { if(NULL == pHead->pNext) { printf("链表为空!\n"); } else { printf("链表不为空!\n"); } } //计算链表中结点的个数 void Length_list(PNODE pHead) { PNODE p = pHead->pNext; int len = 0; while(NULL != p) { len++; p = p->pNext; } printf("这条链表中有%d个结点\n",len); } //对链表中的数据排序 void Sort_list(PNODE pHead) { int temp;//中间变量 PNODE p, q; for(p = pHead; NULL != p; p=p->pNext) { for(q=p->pNext; NULL != q; q=q->pNext) { if(p->data > q->data) { temp = p->data; p->data = q->data; q->data = temp; } } } }
测试程序:
当链表中没有结点时
当链表中有1个结点时
当链表中有5个结点时
原文地址:http://blog.csdn.net/u010105970/article/details/24631313