点击(此处)折叠或打开
- #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);
- bool insert_list(PNODE,int,int);
- bool delete_list(PNODE,int,int *);
- void sort_list(PNODE);
- int main(void)
- {
- PNODE pHead = NULL;
- pHead = create_list(); //创建一个非循环单链表,并将该链表的头结点的地址赋给pHead
-
- int len = length_list(pHead);
- printf("链表的长度为:%4d\n",len);
- printf("排序前链表序列为:\n");
- traverse_list(pHead);
- printf("排序后链表序列为:\n");
- sort_list(pHead);
- traverse_list(pHead);
- return 0;
- }
- PNODE create_list(void)
- {
- int len; //用来存放有效结点的个数
- int i;
- int val; //用来临时存放用户输入的结点的值
- PNODE pHead = (PNODE)malloc(sizeof(NODE));
- if (NULL == pHead)
- {
- printf("分配失败,程序终止!");
- 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 (NULL == pNew)
- {
- printf("分配失败,程序终止!");
- exit(-1);
- }
- pNew->data = val;
- pTail->pNext = pNew; //把pNew挂在了pTail的后边
- 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");
- }
- bool is_empty(PNODE pHead)
- {
- if (NULL == pHead->pNext)
- return true;
- else
- return false;
- }
- int length_list(PNODE pHead)
- {
- PNODE p = pHead->pNext;
- int len=0; //局部变量必须赋初值,否则排序会出错 因为len中为垃圾值
- while(NULL != p)
- {
- ++len;
- p = p->pNext;
- }
- return len;
- }
- void sort_list(PNODE pHead)
- {
- int i,j,tmp;
- 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)
- {
- tmp = p->data;
- p->data = q->data;
- q->data =tmp;
- }
- }
-
- }
- }
- /*
- for(i=0;i<len-1;++i)
- {
- for (j=i+1;j<len;++j)
- {
- if (a[i] > a[j])
- {
- tmp = a[i];
- a[i] = a[j];
- a[j] = tmp;
- }
- }
- }
- */