#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;
}
}
}
原文链接: https://www.cnblogs.com/kongdf/archive/2012/08/16/2642282.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/59613
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!