/*
* 链表
*/
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct NODE
{
struct NODE*pnext;
int data;
}NODE, *PNODE;
PNODE create_list1(void);//头插法
PNODE create_list2(void);//尾插法
bool is_empty(PNODE p);
int lenth(PNODE phead);
bool traverse_list(PNODE);
bool sort_list(PNODE);
bool delete_list(PNODE, int, int*);
bool insert_list(PNODE, int, int);
int main(void)
{
int f;
int x;
PNODE phead = create_list1();
traverse_list(phead);
sort_list(phead);
traverse_list(phead);
f = lenth(phead);
printf("%d\n", f);
delete_list(phead, 3, &x);
traverse_list(phead);
insert_list(phead, 4, 5);
traverse_list(phead);
return 0;
}
PNODE create_list1(void)//头插法
{
PNODE phead = (PNODE)malloc(sizeof(NODE));
if (NULL == phead)
{
printf("分配失败!");
exit(-1);
}
int len = 0;
int i = 0;
scanf("%d", &len);
PNODE ptail = phead;
ptail->pnext = NULL;
for (i = 0; i < len; i++)
{
printf("请输入第%d个元素", i + 1);
int val;
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;
}
bool traverse_list(PNODE phead)
{
if (is_empty(phead))
{
return false;
}
else
{
PNODE p;
p = phead->pnext;
while (p != NULL)
{
printf("%d", p->data);
p = p->pnext;
}
}
printf("\n");
return true;
}
bool is_empty(PNODE phead)
{
if (phead->pnext == NULL)
{
return true;
}
else
{
return false;
}
}
int lenth(PNODE phead)
{
int x = 0;
PNODE p;
p = phead->pnext;
while (p != NULL)
{
x++;
p = p->pnext;
}
return x;
}
bool sort_list(PNODE phead)//从大到小进行排序
{
int i, h,tem;
PNODE p1,p2;
int len = lenth(phead);
for(i=0,p1=phead->pnext;i<len-1;i++,p1=p1->pnext)
for (h = i + 1,p2=p1->pnext;h < len; h++,p2=p2->pnext)
{
if (p2->data > p1->data)
{
tem = p1->data;
p1->data = p2->data;
p2->data = tem;
}
}
return true;
}
bool delete_list(PNODE phead,int x,int* y)
{
int i = 0;
PNODE p = phead;
while (p->pnext != NULL && i < x - 1)
{
i++;
p = p->pnext;
}
if (i > x - 1 || p->pnext == NULL)
return false;
*y = p->data;
PNODE q = p->pnext;
p->pnext = p->pnext->pnext;
free(q);
q = NULL;
return true;
}
bool insert_list(PNODE phead, int x, int y)//x代表所处位置,代表要插入的数值
{
int i=0;
PNODE p = phead;
while (p->pnext != NULL && i < x - 1)
{
i++;
p = p->pnext;
}
if (i > x - 1 || p->pnext == NULL)
return false;
PNODE pnew = (PNODE)malloc(sizeof(NODE));
pnew->pnext = p->pnext;
pnew->data = y;
p->pnext = pnew;
}
附带删除插入代码