数据结构之单链表的链式存储实现
//====================================================================== // // 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,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,node); // not success insertNode(list,1000,node); // insert in last traverseList(list); return 0; }
注:原创文章,转载请注明出处:http://blog.csdn.net/scottly1/article/details/43247465