C语言实现单链表

来源:互联网 发布:双色球行情分析软件 编辑:程序博客网 时间:2024/06/08 01:30

linklist.h

#ifndef __LINKLIST_H__#define __LINKLIST_H__#include<stdio.h>#include<stdlib.h>#include<assert.h>typedef int DataType;typedef struct ListNode{DataType data;struct ListNode *next;}ListNode;ListNode* InitList(DataType num);void PushBack(ListNode **pplist, DataType num);//尾插void PrintList(ListNode *plist);//打印void PopBack(ListNode **pplist);//尾删void PushFront(ListNode **pplist, DataType num);//头插void PopFront(ListNode **pplist);//头删ListNode* Find(ListNode *plist, DataType num);//查找void Insert(ListNode** pplist, ListNode* pos, DataType x);//插入void Erase(ListNode** pplist, ListNode* pos);//删除#endif//__LINKLIST_H__
linkst.c

#include "linklist.h"ListNode* InitList(DataType num){ListNode* p =(ListNode*)malloc(sizeof(ListNode));p->data=num;p->next=NULL;return p;}void PushBack(ListNode **pplist, DataType num)//尾插{//切记这一步ListNode* p = *pplist;if ((*pplist)==NULL){*pplist=InitList(num);}else {/*struct ListNode *tmp=(struct ListNode *)malloc(sizeof(ListNode));tmp->data=num;tmp->next=NULL;(*pplist)->next=tmp;*/while(p->next!=NULL)p=p->next;p->next = InitList(num);}}void PrintList(ListNode *plist)//打印{ListNode *p=plist;assert(plist);while(p!=NULL){printf("%d,",p->data);p=p->next;}printf("\n");}void PopBack(ListNode **pplist)//尾删{ListNode *p=*pplist;ListNode *tmp=*pplist;assert(*pplist);while(p->next!=NULL){ p=p->next;}while(tmp->next!=p){tmp=tmp->next;}tmp->next=NULL;free(p);}void PushFront(ListNode **pplist, DataType num)//头插{ListNode *p = NULL;if ((*pplist)==NULL){*pplist=InitList(num);}else{p=InitList(num);p->next=(*pplist);//切记这一步(*pplist)=p;}}void PopFront(ListNode **pplist)//头删{ListNode *p=*pplist;assert(*pplist);(*pplist)=(*pplist)->next;free(p);}ListNode* Find(ListNode *plist, DataType num)//查找{ListNode *p = plist;assert(plist);//注意这里是pwhile(p!=NULL){if (p->data==num){return p;}p=p->next;}return NULL;}void Insert(ListNode** pplist, ListNode* pos, DataType x)//插入{ListNode *p=*pplist;ListNode *s=NULL;assert((*pplist)&&pos);while(p->next!=pos){p=p->next;}p->next=InitList(x);s=p->next;s->next=pos;}void Erase(ListNode** pplist, ListNode* pos)//删除{ListNode *p=*pplist;ListNode *s=NULL;assert((*pplist)&&pos);while(p->next!=pos){p=p->next;}p->next=pos->next;free(pos);}

test.c
#include "linklist.h"void test(){ListNode *pList = NULL;PushBack(&pList,3);PushBack(&pList,4);PushBack(&pList,5);PushBack(&pList,6);PrintList(pList);PopBack(&pList);PrintList(pList);PopBack(&pList);PrintList(pList);}void test1(){ListNode *pList = NULL;ListNode *ret =NULL;PushBack(&pList,3);PushBack(&pList,4);PushBack(&pList,5);PrintList(pList);ret=Find(pList,5);Erase(&pList,ret);PrintList(pList);}int main(){//test();test1();return 0;}


原创粉丝点击