C语言单链表实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}

猜你喜欢

转载自blog.csdn.net/q601115211/article/details/78142477