1. 程式人生 > 其它 >C語言連結串列實現(郝斌數連結串列學習筆記)

C語言連結串列實現(郝斌數連結串列學習筆記)

#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
	int data ;//資料域

	struct Node * pNext; //指標域  這個指標域它指向的是跟它本身一樣的資料型別的另一個節點 

}NODE,*PNODE; //NODE等價於struct Node		PNODE等價於struct Node*

PNODE create_list(void);

void traverse_list(PNODE pHead);

bool is_empty(PNODE pHead);

int length_list(PNODE);

bool insert_list(PNODE,int,int);

bool delete_list(PNODE,int ,int*);
//動態分配的記憶體

int main(int argc, char* argv[])
{
	PNODE pHead = NULL; //等價於struct Node * pHead = Null  頭節點

	pHead = create_list();//create_list():建立一個非迴圈單鏈表,並將該連結串列的頭節點的地址賦給pHead

	traverse_list(pHead);

	system("pause");

	return 0;
}

PNODE create_list(void)//返回型別為地址  PNODE = struct Node*
{
	int len;//用來存放有效結點的個數

	int i; 

	int val;//用來臨時存放使用者輸入的結點的值

	//分配了一個不存放有效資料的頭節點,不能叫頭指標
	PNODE pHead = (PNODE)malloc(sizeof(NODE));//分配頭節點的首地址給了pHead  PNODE = struct Node*
	if (NULL==pHead)
	{
		printf("分配失敗,程式失敗!");
		exit(-1);
	}
	PNODE pTail = pHead; //尾結點 初始化

	pTail->pNext = NULL; //用來清空尾結點的指標域

	printf("請輸入您需要生成的連結串列節點的個數:len = \n");

	scanf("%d",&len);

	for( i = 0; i<len;++i)
	{
		printf("請輸入第%d個節點的值",i+1);

		scanf("%d",&val);

		PNODE pNew = (PNODE)malloc(sizeof(NODE));//	PNODE等價於struct Node*

		if(NULL==pNew)
		{
		
			printf("分配失敗,程式終止");
		}
		pNew->data =val;// 將變數值賦值到結點的資料域當中

		pTail->pNext = pNew; //將新的結點掛到尾結點

		pNew->pNext = NULL;

		pTail = pNew;

	}
	return pHead;
}
void traverse_list(PNODE pHead)
{ //連結串列不能用陣列來遍歷
	PNODE p = pHead->pNext; //p指向第一個有效結點

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

		p = p->pNext;

	}
	printf("\n");
	return ;
	 
}