数据结构学习之路(二)单链表的简单实现

若有写的不妥的地方,留言或在通过文章下方邮箱联系我即可,万分感谢。

我是在mac系统下调试的代码,需要include的包可能会与其他系统略有不同。

# include 
# include 

typedef struct MyNode{
	int data;
	struct MyNode * pNext;
}*PNODE, NODE;

PNODE create_list(void);
void showList(PNODE);
bool isEmpty(PNODE);
int length(PNODE);
bool insert(PNODE, int, int);
bool delete_list(PNODE, int, int *);
void sort(PNODE);

int main(void)
{
	PNODE pHead = create_list();
	showList(pHead);

	if (isEmpty(pHead))
		printf("%s\n", "链表为空!");
	else
		printf("%s\n", "链表不为空!");

	sort(pHead);
	showList(pHead);

	insert(pHead, 5, 100);
	showList(pHead);

	int val;
	delete_list(pHead, 5, &val);
	showList(pHead);
	printf("%d\n", val);

	return 0;
}

PNODE create_list(void){
	int len;
	int i;
	int val;

	printf("%s ", "请输入您要生成的链表节点的个数:");
	scanf("%d", &len);

	PNODE pHead = (PNODE)malloc(sizeof(NODE));

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

	PNODE pTail = pHead;
	pTail->pNext = NULL;

	for(i=0; ipNext = pNew;
		pNew->data = val;
		pNew->pNext = NULL;
		pTail=pNew;
	}
	
	return pHead;
}

void showList(PNODE pHead){
	PNODE p = pHead->pNext;
	while (p!=NULL){
		printf("%d  ", p->data);
		p = p->pNext;
	}
	printf("\n");
}

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

int length(PNODE pHead){
	int len = 0;
	PNODE p = pHead->pNext;
	while(p!=NULL){
		p = p->pNext;
		len++;
	}
	return len;
}

bool insert(PNODE pHead, int index, int val){
	PNODE p = pHead;
	int i=0;
	while(ipNext;
		i++;
	}

	if (p==NULL)
		return false;

	PNODE pNew = (PNODE)malloc(sizeof(NODE));

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

	pNew->data = val;

	pNew->pNext=p->pNext;
	p->pNext = pNew;

	return true;
}

/**/
bool delete_list(PNODE pHead, int index, int * val){
	PNODE p = pHead;
	int i = 0;
	while(ipNext;
		i++;
	}

	if (p==NULL)
		return false;

	PNODE q = p->pNext;
	*val = q->data;
	p->pNext = q->pNext;
	free(q);
	return true;
}

void sort(PNODE pHead){
	PNODE p, q;
	for(p = pHead->pNext; p->pNext != NULL; p=p->pNext){
		for(q=p->pNext; q != NULL; q=q->pNext){
			if (p->data > q->data){
				p->data = p->data + q->data;
				q->data = p->data - q->data;
				p->data = p->data - q->data;
			}
		}
	}
}

email: [email protected]


版权声明:博客编写不易,转载时请注明出处,万分感谢 !

https://blog.csdn.net/zyy_2018/article/details/79733562



你可能感兴趣的:(数据结构学习)