本人刚开始研究数据结构,欢迎拍砖!!!
首先从最简单的线性表开始
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个元素
//存在返回该节点指针,不存在返回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
#include
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
#include
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;
}