【数据结构】链式存储单链表

来源:互联网 发布:Java 线程池 newsingle 编辑:程序博客网 时间:2024/05/29 08:40


数据结构单链表的链式存储实现


//======================================================================  //  //        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 TRUE1#define FALSE1typedef 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 successinsertNode(list, 1000, node); // insert in lasttraverseList(list);return 0;}

注:原创文章,转载请注明出处:http://blog.csdn.net/scottly1/article/details/43247465


1 0
原创粉丝点击