#include<stdio.h>
#include<malloc.h>
#include<stdbool.h>
typedef struct Node{
int data;
struct Node * pNext;
}NODE, * PNODE;
PNODE create_list(void);
void travle_list(PNODE pHead);
bool is_empty(PNODE pHead);
int length_list(PNODE);
bool delete_list(PNODE,int,int *); //通过输入指针,来获取被删除的值,而不是用return 来返回
void sort_list(PNODE);
int main()
{
int val;
PNODE pHead = NULL;
pHead = create_list(); //头节点的位置给pHead
travle_list(pHead);
// delete_list(pHead, 2, &val);
// printf("val = %d\n", val);
// travle_list(pHead);
// if (is_empty(pHead))
// {
// printf("yes is empty");
// }
sort_list(pHead);
travle_list(pHead);
// insert_list(pHead, 1, 2);
// travle_list(pHead);
return 0;
}
PNODE create_list(void)
{
int len, i, val;
printf("输入节点长度:");
scanf("%d", &len);
PNODE pHead = (PNODE)malloc(sizeof(NODE)); // 头指针数据域不用赋值
if (pHead == NULL)
{
printf("分配失败,程序终止!\n");
exit(-1);
}
PNODE pTail = pHead; //首尾同一节点 // 链表 头尾节点都应该在最开始就定义出来,头就是第一个(无数据,首节点是第一个有数据), 尾就是最后一个
pTail->pNext = NULL; //尾节点指向空 //尾节点的p->next永远都是NULL
for(i=0; i<len; i++)
{
printf("请输入第%d节点的值:",i+1);
scanf("%d", &val);
PNODE pNew = (PNODE)malloc(sizeof(NODE));
pNew->data = val;
pNew->pNext = NULL;
//尾节点重置
pTail->pNext = pNew;
pTail = pNew;
}
return pHead;
}
void travle_list(PNODE pHead)
{
PNODE p = pHead->pNext;
while( p != NULL )
{
printf("%d\n", p->data);
p = p->pNext;
}
}
void insert_list(PNODE pHead, int val, int pos)
{
int i = 0;
PNODE p = pHead;
while (p!=NULL && i<pos-1 )
{
i++;
p = p->pNext;
}
printf("此时的值是:%d\n", p->data);
PNODE pNew = (PNODE)malloc(sizeof(NODE));
pNew->data = val;
pNew->pNext = NULL; //这样才算是个安全的节点,否则以后写错代码的时候,可能会内存泄漏
pNew->pNext = p->pNext;
p->pNext = pNew;
}
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;
}
bool delete_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||NULL==p->pNext)
return false;
PNODE r = p->pNext;
p->pNext = p->pNext->pNext;
*val = r->data;
free(r);
r = NULL;
return true;
}
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;
}
郝斌C链表完整
最新推荐文章于 2022-08-14 17:43:32 发布