当前位置: 移动技术网 > IT编程>开发语言>C/C++ > C单链表的实现代码教程

C单链表的实现代码教程

2018年10月05日  | 移动技术网IT编程  | 我要评论

冯小刚买菜狂砍价,小时代周崇光扮演者,住户不满强拆

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;
}

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网