独角兽企业重金招聘Python工程师标准>>>
本人刚开始研究数据结构,欢迎拍砖!!!
首先从最简单的线性表开始
1.线性表存储结构
a。顺序存储,最简单来说就是数组了吧,这里就不说了。
b。链式存储,就是来说链表了。
2.链表
在这里使用的是有head的链表,头部不含数据信息。
如图所示
首先是节点信息
//链表节点结构typedef struct node{int data; //节点值域struct node* next;//节点指针域}NODE;
下面介绍关于链表的简单操作,还是直接贴代码吧。。。
一共三个文件。
linkList.H
/************************************************************************//* 操作单链表,该链表带有头部空节点 *//* *//**********************************************************************///链表节点结构typedef struct node{int data; //节点值域struct node* next;//节点指针域}NODE;//查找链表中第K个元素//存在返回该节点指针,不存在返回nullNODE* 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;}