数据结构之单链表(头插法)

1.线性结构是一个有序数据元素的集合。
常用的线性结构有:线性表,栈,队列,双队列,串。

2.定义:单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。

3.详细代码如下:

/*头插法(含头结点)建立*/ 
#include
#include
#include
#define MaxSize 100 
using namespace std;
typedef struct node{
  int elem;  //数据域   
  struct node *next;  //指针域 
}node;

node * initlinklist(node *head);
bool insertlinklist(node *head,int data); 
bool Createlinklist(node *head);
int find_data(node *head,int get_elem);
bool deletelinklist(node *head,int data);

    //初始化
node * initlinklist(node *head){
    head=new node;  //分配内存 
    head->elem=0; 
    head->next=NULL;  //不为野指针 
    return head;
}
    	/*  创建 
	  特征:头结点(指针)永远指向新结点
	       逻辑上的结点顺序与物理上的结点顺序并不相同
		   pnode->next=head->next;
		   head->next=pnode;   
	注:头结点(指针)的数据域依旧会存在值,初始化为零避免它成为一个野值 
	  */
bool Createlinklist(node *head){
	if(!head) return false;
		/*建立含数据的新结点*/
  	   /*头结点指向新结点*/ 
	int data=0;
  	for(int i=1;i<=50;i++){
	  if(i%2==0){
	  	data=i;
		node *pnode=new node;
		pnode->elem=data;
		pnode->next=head->next;  
		head->next=pnode;
		  }
	    }
	    return true; 
}
    //插入
bool insertlinklist(node *head,int data){
   if(!head) return false;
   node *new_node=new node;
   if(data!=0){
   	 new_node->elem=data;
   	 new_node->next=head->next;
   	 head->next=new_node;
   }
   return true; 
} 
	//删除
bool deletelinklist(node *head,int data){
    if(!head) return false;
    while(NULL!=head->next){  //要查找该结点的前一个结点 
	   if(head->next->elem==data)  break;  
	   head=head->next; 
	}
    node *out_node=head->next;
	head->next=head->next->next;
	free(out_node);
	out_node=NULL;
	return true;
};
	//查找 
int find_data(node *head,int get_elem){
	int searchtime=0;
	node *pointer=head;
	while(pointer->next!=NULL){
		searchtime++;
		if(pointer->next->elem==get_elem){
			return searchtime;
			break;
		}else{
			pointer=pointer->next;
		}
	}
	return 0;
}

你可能感兴趣的:(数据结构)