欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C单链表的实现代码教程

程序员文章站 2022-10-26 08:51:02
slistnode.h #ifndef _slistnode_h_ #define _slistnode_h_ #include #include #include #include...

slistnode.h

#ifndef _slistnode_h_
#define _slistnode_h_
#include
#include
#include
#include
#include

typedef int datatype;

typedef struct slistnode 
{ 
	struct slistnode* _next; 
	datatype _data; 
}slistnode;

slistnode* init();
slistnode* buyslistnode(datatype x); 
void slistprint(slistnode* phead); 
void slistdestory(slistnode** pphead); 

void slistpushback(slistnode** pphead, datatype x); 
void slistpopback(slistnode** pphead); 
void slistpushfront(slistnode** pphead, datatype x); 
void slistpopfront(slistnode** pphead); 
slistnode* slistfind(slistnode* phead, datatype x); 
void slistinsert(slistnode** pphead, slistnode* pos, datatype x); 
void slisterase(slistnode** pphead, slistnode* pos); 

void test1();
void test2();
#endif

slistnode.c

#include"slistnode.h"

//初始化
slistnode* init(){
	slistnode* head = (slistnode *)malloc(sizeof(slistnode));
	head->_next=null;
	return head;
}

//创建一个结点
slistnode* buyslistnode(datatype x){
	slistnode *node = (slistnode *)malloc(sizeof(slistnode));
	node->_data=x;
	node->_next=null;
	return node;
}

//打印单链表
void slistprint(slistnode* phead){

	slistnode* cur;
	assert(phead);
	cur = phead->_next;
	while(cur){
		printf("%d ",cur->_data);
		cur=cur->_next;
	}
	printf("\n");
}

//销毁
void slistdestory(slistnode** pphead){
	slistnode *cur,*t;
	assert(pphead);
	cur = *pphead;
	while(cur){
		t = cur->_next;
		free(cur);
		cur = t;
	}
}

//尾插;
void slistpushback(slistnode **pphead, datatype x){
	
	slistnode *newnode = buyslistnode(x);
	slistnode *cur;
	assert(pphead);
	cur=*pphead;
	while(cur->_next){
		cur=cur->_next;
	}
	cur->_next=newnode;
}

//尾出
void slistpopback(slistnode** pphead){
	slistnode *cur,*pr;
	if((*pphead)->_next==null){
		printf("表空\n");
		return;
	}
	pr=cur=*pphead;
	assert(pphead);
	while(cur->_next){
		pr = cur;
		cur=cur->_next;
	}
	free(cur);
	pr->_next=null;
}

void slistpushfront(slistnode** pphead, datatype x){
	slistnode *head,*newnode;
	assert(pphead);
	head = *pphead;
	newnode = buyslistnode(x);
	newnode->_next = head->_next;
	head->_next=newnode;

}
void slistpopfront(slistnode** pphead){
	slistnode *head,*temp;
	assert(pphead);
	if((*pphead)->_next==null){
		printf("空表\n");
		return;
	}

	temp = head = *pphead;
	temp = temp->_next;
	head->_next = temp->_next;
	free(temp);
}

slistnode* slistfind(slistnode* phead, datatype x){
	slistnode* cur;
	assert(phead);
	cur = phead;
	while(cur){
		if(cur->_data==x){
			printf("zhaodaole\n");
			return cur;
		}
		cur = cur->_next;
	}
	return null;
}

void slistinsert(slistnode** pphead, slistnode* pos, datatype x){
	slistnode *cur,*pr,*newnode;
	newnode = buyslistnode(x);
	assert(pphead);
	assert(pos);
	pr = cur = *pphead;
	while(cur&&cur!=pos){
		pr = cur;
		cur = cur->_next;
	}
	if(cur){
		newnode->_next = cur;
		pr->_next = newnode;
	}
}

void slisterase(slistnode** pphead, slistnode* pos){
	slistnode *cur,*pr;
	assert(pphead);
	assert(pos);
	pr = cur = *pphead;
	while(cur&&cur!=pos){
		pr = cur;
		cur = cur->_next;
	}
	pr->_next = cur->_next;
	free(cur);
}


void test1(){
	slistnode *list=init();
	slistpushback(&list,1);
	slistpushback(&list,2);
	slistpushback(&list,3);
	slistpushback(&list,4);
	slistpushback(&list,5);
	slistprint(list);
	slistpopback(&list);
	slistpopback(&list);
	slistpopback(&list);
	slistpopback(&list);
	slistpopback(&list);
	slistpopback(&list);
	slistprint(list);
	slistdestory(&list);
}
void test2(){
	slistnode *node;
	slistnode *list=init();
	slistpushfront(&list,1);
	slistpushfront(&list,2);
	slistpushfront(&list,3);
	slistpushfront(&list,4);
	slistpushfront(&list,5);
	slistprint(list);
	slistpopback(&list);
	slistpopback(&list);
	slistpopback(&list);
	slistprint(list);
	node=slistfind(list,5);
	if(node){
		printf("%d \n",node->_data);
	}
	slistinsert(&list,node,6);
	slistinsert(&list,node,7);
	slistinsert(&list,node,8);
	slistprint(list);
	node=slistfind(list,6);
	slisterase(&list,node);
	slistprint(list);

	slistpopfront(&list);
	slistpopfront(&list);
	slistpopfront(&list);
	slistpopfront(&list);
	slistpopfront(&list);
	slistprint(list);

}

main.c

#include"slistnode.h"

int main(){
	test1();
	system("pause");
	return 0;
}