您的位置:首页 > 其它

单向链表(一) 节点结构体、创建链表、释放链表、遍历链表

2014-07-31 11:24 405 查看
1、定义一个节点的结构体,用于存储 数据 和 指针:

// 定义节点结构体
struct tagNode
{
int value;
tagNode *pNext;
};


2、看一张单向链表的结构图:



3、如果,要用链表按顺序存放这样一组数据:{1, 3, 5, 2,4,8,6,7},如图所示:



4、创建链表:

tagNode* CreateLinkedList()
{
tagNode *pHead = NULL; // 头结点
tagNode *pEnd = NULL;  // 尾节点
tagNode *pNew = NULL;  // 新节点

char choose = 'y';
int integer;

printf("请输入节点的值:");
scanf("%d", &integer);
getchar();

// 创建一个新节点
pNew = (tagNode *)malloc(sizeof(tagNode));
pNew->value = integer;
pNew->pNext = NULL;

pHead = pNew; // 因为是第一个节点,所以新建的节点即是头结点
pEnd = pHead; // 因为是第一个节点,所以头结点即是尾节点

printf("\n\n是否继续添加节点(y/...):");
scanf("%c", &choose);
getchar();

while (choose == 'y')
{
printf("请输入节点的值:");
scanf("%d", &integer);
getchar();

// 创建一个新节点
pNew = (tagNode *)malloc(sizeof(tagNode));
pNew->value = integer;
pNew->pNext = NULL;

pEnd->pNext = pNew; // 将创建的新节点 连接到 链表末尾
pEnd = pNew;        // 链表的尾节点改变(变为新节点)

printf("\n\n是否继续添加节点(y/...):");
scanf("%c", &choose);
getchar();
}

return pHead;
}


5、遍历链表

void TraverseNodes(tagNode *pHead)
{
tagNode *pTemp = pHead;

if (pHead == NULL)
{
printf("链表为空!\n");
return;
}

while (pTemp)
{
printf("%d\t", pTemp->value);
pTemp = pTemp->pNext;
}
}


6、释放链表:

void FreeLinkedList(tagNode *pHead)
{
tagNode *pTemp = NULL;

if (pHead == NULL)
{
printf("链表为空!\n");
return;
}

while (pHead)
{
pTemp = pHead->pNext;
free(pHead);
pHead = pTemp;
}
}


7、main函数中调用:

int _tmain(int argc, _TCHAR* argv[])
{
tagNode *p = NULL;
p = CreateLinkedList();

printf("\n\n遍历:\n");
TraverseNodes(p);

FreeLinkedList(p);

getchar();
return 0;
}


8、运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐