本人剛開始研究數據結構,歡迎拍磚!!!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; }