版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q601115211/article/details/78142477
实现的方法
PNODE create(void);
void travers(PNODE);
bool empty(PNODE);
int length(PNODE);
void sort(PNODE);
bool insert(PNODE, int, int);
bool del(PNODE, int, int*);
全部代码
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
/*
* 单链表
*/
typedef struct Node{
int data; //数据
struct Node *pNext; //下一个节点指针
}NODE, *PNODE;
PNODE create(void);
void travers(PNODE);
bool empty(PNODE);
int length(PNODE);
void sort(PNODE);
bool insert(PNODE, int, int);
bool del(PNODE, int, int*);
int main(void){
PNODE pHead = NULL;
pHead = create();
if (empty(pHead)){
printf("链表为空");
}
int len = length(pHead);
printf("lenght:%d \n", len);
travers(pHead);
printf("sort");
sort(pHead);
travers(pHead);
int pVal;
del(pHead, 2, &pVal);
printf("del,pos:%d,val%d", 2, pVal);
travers(pHead);
insert(pHead, 3, 122);
printf("insert,pos:%d,val%d", 3, 122);
travers(pHead);
system("pause");
return 0;
}
PNODE create(void){
int len; //节点个数
int val; //节点值
int i;
printf("请输入节点个数len: ");
scanf("%d", &len);
PNODE pHead = (PNODE)malloc(sizeof(NODE));
pHead->pNext = NULL;
PNODE pTial = (PNODE)malloc(sizeof(NODE));
pTial = pHead;
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;
//把pNew 新节点挂到pTail后面
pTial->pNext = pNew;
pTial = pNew;
}
return pHead;
}
void travers(PNODE pHead){
if (empty(pHead)) return ;
PNODE p = pHead->pNext;
printf("[");
while (NULL != p)
{
printf(" %d, ", p->data);
p = p->pNext;
}
printf("]\n");
return;
}
bool empty(PNODE pNode){
if (NULL == pNode->pNext)
return true;
else
return false;
}
int length(PNODE pNode){
int length = 0;
PNODE p;
p = pNode->pNext;
while (NULL != p)
{
++length;
p = p->pNext;
}
return length;
}
void sort(PNODE pNode){
PNODE p, q;
int i, j, t;
int len = length(pNode);
for (i = 0, p = pNode->pNext; i < len - 1; ++i, p = p->pNext)
{
for (j = i + 1, q = p->pNext; j < len - 1; q = q->pNext, ++j)
{
if (p->data > q->data){
t = p->data;
p->data = q->data;
q->data = t;
}
}
}
}
bool insert(PNODE pNode, int pos, int val){
int i = 0;
PNODE p = pNode;
while (NULL != p->pNext && i > pos - 1)
{
p = p->pNext;
++i;
}
if (i > pos || NULL == p){
return false;
}
PNODE pNew = (PNODE)malloc(sizeof(NODE));
pNew->data = val;
PNODE q = p->pNext;
p->pNext = pNew;
pNew->pNext = q;
return true;
}
bool del(PNODE pNode, int pos, int * pVal){
int i = 0;
PNODE p = pNode;
while (NULL != p->pNext && i < pos - 1)
{
p = p->pNext;
++i;
}
if (i > pos - 1 || NULL == p->pNext){
return false;
}
PNODE q;
q = p->pNext;
*pVal = q->data;
p->pNext = p->pNext->pNext;
free(q);
q = NULL;
return true;
}