数据结构与算法---单链表(C语言版本)

1)线性表:

1.有限的序列 2.序列中的每一个元素都有唯一的前驱和后继,除了开头和结尾两个节点。


2)顺序表:

分配一些连续的内存去存放这些元素,例如编程语言中的数组


3)链表:

内存时不连续的,元素会各自被分配一块元素,内存和内存之间用指针进行相连(指针域next和数据域data)


4)单链表操作:


1.增加
     1.头插法
      2.尾插法
2.删除:只要找到对应的节点,将对应的节点的前一个节点指向这个节点的后继,只操作一个指针
3.头节点:保存链表元素的个数

代码部分:

#include
#include
typedef struct Node{
	int data;             //数据域 
	struct Node* next;   //指针域 
}Node;                  //定义结构体变量 
Node* initList(){
	Node* list =(Node*)malloc(sizeof(Node));
	list->data=0;
	list->next=NULL;
	return list;
}                      //创捷链表 
void headInsert(Node* list,int data){
	Node* node=(Node*)malloc(sizeof(Node));
	node->data=data;
	node->next=list->next;
	list->next=node;
	list->data++;
}                    //头插法 
void tailInsert(Node* list,int data){
	Node* head=list;
	Node* node=(Node*)malloc(sizeof(Node));
	node->data=data;
	node->next=NULL;
	list=list->next;
	while(list->next){
		list=list->next;
	}	
	list->next=node;
	head->data++;
}                 //尾插法 
void deleteNode(Node* list,int data){
	Node* pre=list;
	Node* current=list->next;
	while(current){
		if(current->data==data){
			pre->next=current->next;
			free(current);
			break;
		}
		pre=current;
		current=current->next;
	}
	list->data--;
}
void printList(Node* list){
	list=list->next;
	while(list){
		printf("%d",list->data);
		list=list->next;
	}
	printf("\n");
}
int main()
{
	Node* list=initList();
	headInsert(list,1);
	headInsert(list,2);
	headInsert(list,3);
	headInsert(list,4);
	headInsert(list,5);
                tailInsert(list,6);
	tailInsert(list,7);
	tailInsert(list,8);
	tailInsert(list,9);
	tailInsert(list,10);
	printList(list);
	deleteNode(list,5);
	deleteNode(list,10);
	deleteNode(list,6);
	printList(list);
	system("pause");
	return 0;
}

你可能感兴趣的:(c语言,链表,数据结构)