您的位置:首页 > 编程语言 > C语言/C++

【黑马程序员】C语言-链表

2015-08-26 17:52 483 查看
单链表源代码

# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>

typedef struct Node         //创建链表中的节点结构体
{
int data;
struct Node * pNext;
}NODE, *PNODE;

PNODE Create_List(void);                //创建链表函数
bool Is_Empt(PNODE);                    //判断链表是否为空
void Traverse_List(PNODE);              //遍历链表
bool Insert_List(PNODE, int, int);      //在链表的某个位置插入数值
bool Delete_List(PNODE, int, int *);    //删除链表某个元素
void Sort_List(PNODE);                  //排序链表
int Length_List(PNODE);                 //求链表的长度

int main(void)
{
int val;
PNODE pHead;
pHead = Create_List();
Traverse_List(pHead);
printf("\n");
Sort_List(pHead);
Traverse_List(pHead);

return 0;
}

PNODE Create_List(void)
{
PNODE pHead = (PNODE)malloc(sizeof(NODE));
pHead->pNext = NULL;
PNODE pTail = pHead;
int i;
int len;
int val;

if (pHead == NULL)
{
printf("动态分配内存失败!\n");
exit(-1);
}

printf("请输入要创建节点的个数:");
scanf("%d", &len);
for (i=0; i<len; i++)
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
printf("请输入第%d个节点的值:", i+1);
scanf("%d", &val);
pNew->data = val;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
}

return pHead;
}

bool Is_Empt(PNODE pHead)
{
if (pHead->pNext == NULL)
{
return true;
}
else
{
return false;
}
}

void Traverse_List(PNODE pHead)
{
PNODE p;
p = pHead->pNext;           //遍历链表时,为什么要定义一个p,因为头指针pHead要始终指向头节点,所以用一个p来代替pHead进行链表遍历

if ( Is_Empt(pHead) )
{
printf("\n");
}

while (p != NULL)
{
printf("%d ",p->data);
p = p->pNext;
}

return;

}

bool Insert_List(PNODE pHead, int pos, int val)
{
int i = 0;
PNODE p = pHead;

while (i<pos-1 && p != NULL)            //该语句是要找到pos前面那个元素
{
p = p->pNext;
i++;
}

while (i>pos-1 || p == NULL)            //该语句是判断i的取值是否合理
{
return false;
}

PNODE q = (PNODE)malloc(sizeof(NODE));
q->data = val;
q->pNext = p->pNext;
p->pNext = q;

return true;
}

bool Delete_List(PNODE pHead, int pos, int * pVal)
{
int i = 0;
PNODE p = pHead;

while (i<pos-1 && p != NULL)
{
p = p->pNext;
++i;
}

while (i>pos-1 || p == NULL)
{
return false;
}

PNODE pNew;
pNew = p->pNext;
*pVal = pNew->data;
p->pNext = p->pNext->pNext;
free(pNew);

}

void Sort_List(PNODE pHead)
{
int i, j, len, t;
PNODE p = pHead->pNext;
PNODE q ;
len = Length_List(pHead);
for (i=0; i<len-1; i++,p=p->pNext)
{
for (j=i, q=p->pNext; j<len-1; j++, q=q->pNext)
{
if (p->data > q->data)
{
t = p->data;
p->data = q->data;
q->data = t;
}
}
}

}

int Length_List(PNODE pHead)
{
PNODE p = pHead->pNext;
int len = 0;
while (p != NULL)
{
len++;
p = p->pNext;
}
return len;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: