单向链表(C++)
#include "stdafx.h" #include <iostream> using namespace std; typedef struct Node{ int data; struct Node* next; }NODE,*LinkList;//定义类型 int _tmain(int argc, _TCHAR* argv[]) { LinkList link=(NODE *)malloc(sizeof(NODE)); void InitLinkList(LinkList list);//初始化 LinkList SearchLinkList(LinkList list,int d);//查找 void InsertLinkList(LinkList list,int h,int e);//插入 void DeleteLinkList(LinkList list,int e); void Display(LinkList list);//输出结果 InitLinkList(link); cout<<"链表创建完成:"<<endl; Display(link); cout<<"\n"; int sd; cout<<"请输入要查找的结点数据:"<<endl; cin>>sd; LinkList p=SearchLinkList(link,sd); if(p==NULL){ cout<<"没有找到数据:"<<sd<<endl; }else{ cout<<"找到数据:"<<sd<<" 且指针地址为:"<<p<<endl; } cout<<"\n"; cout<<"请输入要在哪个结点后插入数据:"<<endl; int dh,de; cin>>dh; cout<<"请输入要插入的数据:"<<endl; cin>>de; InsertLinkList(link,dh,de); cout<<"插入完毕!"<<endl; Display(link); cout<<"\n"; cout<<"请输入要删除数据:"<<endl; int ee; cin>>ee; DeleteLinkList(link,ee); cout<<"删除完毕!"<<endl; Display(link); system("pause"); return 0; } //输出链表 void Display(LinkList list) { LinkList q=list; while(q!=NULL){ cout<<q->data<<"—"; q=q->next; } cout<<"\n"; } //初始化 void InitLinkList(LinkList list) { LinkList t;LinkList s=list; int d; cout<<"请顺次输入8个整数:"<<endl; for(int i=0;i<8;i++) { cin>>d; if(i>0){ t=(NODE *)malloc(sizeof(NODE));//从第2个开始分别分配内存 t->data=d;//数据 t->next=NULL; s->next=t;//作为下个元素 s=t; }else{ s->data=d; s->next=NULL; } } } //查找结点 LinkList SearchLinkList(LinkList list,int d) { LinkList p=list; if(list!=NULL){ while(p!=NULL) { if(p->data==d)//若查到,则退出循环 { break; } p=p->next;//没有查到则继续,赋予下一个结点 } } return p; } //插入结点,指定在数据h之后加入e void InsertLinkList(LinkList list,int h,int e) { LinkList p=NULL,next; if(list==NULL){ cout<<"列表为空!";return; } p=SearchLinkList(list,h); if(p==NULL){ cout<<"所要查询的结点不存在!";return; } next=p->next;//h所在结点的下一个结点 LinkList n=(NODE *)malloc(sizeof(NODE));//新生成个结点指针 n->data=e; n->next=next; p->next=n;//将结点p的下一个结点置为新的结点 } //删除结点 void DeleteLinkList(LinkList list,int e) { if(list==NULL){ cout<<"列表为空!";return; } LinkList f=list,p; while(f!=NULL){ if(f->next!=NULL&&(f->next)->data==e)//判断是否是e所在结点前面的结点 { p=f->next; f->next=f->next->next;//f-e所在结点-下一个结点 f=f->next->next; free(p);//释放e所在结点 }else{ f=f->next; } } }
道之所在,虽千万人吾往矣