数据结构之单链表的链式存储实现
//======================================================================
//
// Copyright (C) 2014-2015 SCOTT
// All rights reserved
//
// filename: List.c
// description: a demo to display SeqList
//
// created by SCOTT at 01/28/2015
// http://blog.csdn.net/scottly1
//
//======================================================================
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define TRUE 1
#define FALSE 1
typedef int Status;
typedef int ElementType;
typedef struct _tag_Node
{
ElementType data;
struct _tag_Node *next;
}NODE, *PNODE;
PNODE initList()
{
int i, j = 0;
int nLen;
PNODE pHead = NULL;
PNODE pNode = NULL;
printf("Input The Length:");
scanf("%d", &nLen);
pHead = (PNODE)malloc(sizeof(NODE));
pHead->data = nLen; // 头结点数据域可用于存储如链表长度等信息。
pHead->next = NULL;
for(i=0; i<nLen; ++i, ++j)
{
pNode = (PNODE)malloc(sizeof(NODE));
printf("Input The %d val:", nLen-j);
scanf("%d", &(pNode->data));
pNode->next = pHead->next; // 注意链表的生成技巧!
pHead->next = pNode;
}
return pHead;
}
Status traverseList(PNODE list)
{
int i = 1;
PNODE p = list->next;
ElementType data;
while(p)
{
data = p->data;
printf("The %d Data is:%d\n", i++, data);
p = p->next;
}
printf("The Length of List is %d\n\n", list->data);
return TRUE;
}
Status deleteNode(PNODE list, int pos, PNODE ret)
{
int i = 0;
PNODE pHead = list;
PNODE pTmp = NULL;
if(!pHead || pos <=0 || pos >pHead->data)
{
return FALSE;
}
while(pHead->next && i<pos-1)
{
pHead = pHead->next;
i++;
}
if(!pHead || i>pos-1)
{
return FALSE;
}
pTmp = pHead->next;
pHead->next = pTmp->next;
free(pTmp);
--list->data;
return TRUE;
}
Status insertNode(PNODE list, int pos, PNODE node)
{
int i = 0;
PNODE pHead = list;
if(!pHead || pos <=0) //pos >pHead->data
{
return FALSE;
}
while(pHead->next && i<pos-1)
{
pHead = pHead->next;
++i;
}
node->next = pHead->next;
pHead->next = node;
++list->data;
return TRUE;
}
int main()
{
PNODE list;
PNODE ret;
PNODE node;
list = initList();
traverseList(list);
// 删除测试
deleteNode(list, 2, ret);
traverseList(list);
// 插入测试
node = (PNODE)malloc(sizeof(NODE));
node->data = 100;
insertNode(list, 0, node); // not success
insertNode(list, 1000, node); // insert in last
traverseList(list);
return 0;
}
注:原创文章,转载请注明出处:http://blog.csdn.net/scottly1/article/details/43247465