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; }
上一篇: iOS KVO的基本使用方法