本人刚开始研究数据结构,欢迎拍砖!!!node
首先从最简单的线性表开始数组
1.线性表存储结构数据结构
a。顺序存储,最简单来讲就是数组了吧,这里就不说了。测试
b。链式存储,就是来讲链表了。指针
2.链表code
在这里使用的是有head的链表,头部不含数据信息。it
如图所示io
首先是节点信息class
//链表节点结构 typedef struct node{ int data; //节点值域 struct node* next; //节点指针域 }NODE;
下面介绍关于链表的简单操做,仍是直接贴代码吧。。。
一共三个文件。List
linkList.H
/************************************************************************/ /* 操做单链表,该链表带有头部空节点 */ /* */ /**********************************************************************/ //链表节点结构 typedef struct node{ int data; //节点值域 struct node* next; //节点指针域 }NODE; //查找链表中第K个元素 //存在返回该节点指针,不存在返回null NODE* find_List(NODE* head, int k); //在第K个元素以前插入新的节点 NODE* insert_List(NODE* head, int k, int newItem); //删除第K个节点 int delete_List(NODE* head, int k);
而后是linkList.cpp
#include "linkList.h" #include <stdio.h> #include <MALLOC.H> NODE* find_List(NODE* head, int k){ if (k<1) { return NULL; } int i = 1; NODE* p = head->next; while( NULL != p && i < k) { p = p->next; ++i; } return p; } NODE* insert_List(NODE* head, int k, int newItem){ NODE* p; NODE* s = (NODE*)malloc(sizeof(NODE));//建立新的节点 s->data = newItem; if (k ==0 ) //空链表 { head->next = s; s->next = NULL; return s; } else if (k == 1) //在第一个元素以前插入 { p = head; }else{ p = find_List(head,k-1);//查找第k-1个元素 } if (p==NULL) { free(s); return NULL; } s->next = p->next; p->next = s; return s; } int delete_List(NODE* head, int k){ NODE* p; if (k==1) { p = head; }else { p = find_List(head,k-1); } if (p==NULL || p->next == NULL) //表中不存在 { return 0; } NODE* s = p->next; p->next = s->next; free(s); return 1; }
而后是一个测试。
#include "linkList.h" #include <STDIO.H> #include <MALLOC.H> int main(){ //构建链表 NODE* head = (NODE*)malloc(sizeof(NODE)); head->next = NULL; for (int i = 0; i < 10; i++) { insert_List(head,i,i); } //打印全部节点 NODE* p = head->next; while(p != NULL) { printf("%d\n",p->data); p = p->next; } //删除奇数位置节点 for(int j = 1; j<10; j = j+1) { delete_List(head,j); } //打印全部节点 p = head->next; while(p != NULL) { printf("%d\n",p->data); p = p->next; } return 0; }