赞
踩
- #include <iostream>
- #include<stdio.h>
- #include<stdlib.h>
- #include<stdbool.h>
- #include<windows.h>
- using namespace std;
- typedef struct Node
- {
- int number;//数据域
- struct Node*next;//指针域
- } Node,*Linklist;
- //链表的初始化
- void linklistIntit(Linklist &L)
- {
- L=(Linklist)malloc(sizeof(Node));
- L->next=NULL;
- }
- //头插法创建链表
- void linklistheadCreat1(Linklist &L,int n)
- {
- Linklist p;
- for(int i=0; i<n; i++)
- {
- p=(Linklist)malloc(sizeof(Node));//开辟空间
- cout<<"请你输入数据\n";
- cin>>p->number;
- p->next=L->next;
- L->next=p;
- }
- }
- //尾插法创建链表
- void linklistheadCreat2(Linklist &L,int n)
- {
- Linklist rear=L;//定义rear由下下面操作(rear=p;)让rear始终指向尾部节点
-
- for(int i=0; i<n; i++)
- {
- Linklist p=(Linklist)malloc(sizeof(Node));
- cout<<"请输入数据\n";
- cin>>p->number;
- rear->next=p;
- rear=p;
- rear->next=NULL;//必不可少指向空
- }
- }
- //遍历链表
- void linklistTreavle(Linklist &L)
- {
- Linklist p;
- p=L->next;
- while(p)
- {
- printf("%d ",p->number);
- p=p->next;
- }
- }
- //查找指定元素
- bool linklistLocate(Linklist &L,int data)
- {
- Linklist p;
- p=L->next;
- while(p)
- {
- if(p->number==data)
- {
- cout<<"已找到"<<data<<'\n';
- return true;
- }
- p=p->next;
- }
- cout<<"抱歉没有您要的值!"<<'\n';
- return false;
- }
- //指定位置插入指定元素
- void linklistInsert(Linklist &L,int n,int data)
- {
- Linklist p;
- p=L->next;
- for(int i=0; i<n-1; i++)
- {
- p=p->next;
- }
- Linklist q=(Linklist)malloc(sizeof(Node));
- q->number=data;
- q->next=p->next;//顺序不能颠倒
- p->next=q;
- }
- //删除指定元素
- bool linklistDelete(Linklist &L,int data)
- {
- Linklist p,q;//两个指针使p始终在q的前一个,这样方便删除q之后做好接下来的连接工作
- p=L;
- q=L->next;
- while(q)
- {
- if(q->number==data)
- {
- p->next=q->next;
- free(q);
- cout<<"找到并且删除!\n";
- return true;
- }
- p=q;//使p始终在q的前面
- q=q->next;
- }
- cout<<"不存在您找的值!\n";
- return false;
- }
- //清空链表
- void linklistClear(Linklist &L)
- {
- Linklist p=L;
- while(L)
- {
- L=L->next;//先移动L
- free(p);//再释放p
- p=L;//再移动p
- }
- cout<<"链表清空完毕!\n";
- }
- //菜单
- void linklistMenu()
- {
- cout<<"链表已经完成初始化"<<'\n';
- cout<<"1.头插法建立链表"<<"2.尾插法建立链表"<<'\n';
- cout<<"3.链表中插入数据"<<"4.删除指定数据"<<'\n';
- cout<<"5.查找指定元素"<<"6.清空链表"<<'\n';
- cout<<"7.遍历链表"<<'\n';
-
- }
- int main()
- {
- int data,n,i;
- Linklist L;
- linklistIntit(L);
- while(1)
- {
- system("cls");//清屏
-
- linklistMenu();
- cin>>i;
- switch(i)
- {
- case 1:
- cout<<"请输入数量!"<<'\n';
- cin>>n;
- linklistheadCreat1(L,n);
- break;
- case 2:
- cout<<"请输入数量!"<<'\n';
- cin>>n;
- linklistheadCreat2(L,n);
- break;
- case 3:
- cout<<"请输入位置和新值!"<<'\n';
- cin>>n>>data;
- linklistInsert(L,n,data);
- break;
- case 4:
- cout<<"请输入要删除的值!"<<'\n';
- cin>>data;
- linklistDelete(L,data);
- break;
- case 5:
- cout<<"请输入要查找的值!"<<'\n';
- cin>>data;
- linklistLocate(L,data);
- break;
- case 6:
- linklistClear(L);
- break;
- case 7:
- linklistTreavle(L);
- }
-
- system("pause");//按任意键继续
-
- }
- return 0;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。