链表(C++语言实现)
注意:没有使用malloc和free;加了一个头文件,用于清屏和暂停;还有就是一个错误特别容易被忽略,那就是主函数中声明了LinkList p,然后就直接创建链表,忘了给p分配空间。一定要先初始化链表再建立。以下代码说白了就是一个个的函数堆出来的,只是要注意函数的参数有时候有引用符&,有时候没有,我总结了一个便于记忆的小技巧:如果你想要对链表做出任何改变,请一定加上&;如果你对链表不想做出改变,就可以不用加,无论你加还是不加,为了保险,可以都加上。如果擅长用指针的话,就忽略从此段话!!!!!
#include<iostream>
#include<cstdlib>
using namespace std; struct LNode{
int data;
LNode* next;
};
typedef LNode *LinkList; //函数声明
void show();
void InitList(LinkList &L);
int CreateList(LinkList &L,int n);
int InsertList(LinkList &L,int index,int e);
string GetElem(LinkList L,int index,int &e);
int deleteList(LinkList &L,int index,int &e);
void PrintList(LinkList L); int main(){
int action,length,index,result,e;
string res;
LinkList L;
show();
while(cin>>action){
switch(action){ case 1://初始化链表
system("cls");
InitList(L);
break; case 2://建立链表
system("cls");
cout<<"请输入链表的长度:"<<endl;
cin>>length;
result=CreateList(L,length);
if(!result){
cout<<"创建链表失败!"<<endl;
} else {
cout<<"创建链表成功!"<<endl;
}
break; case 3://向链表中插入数据
system("cls");
cout<<"请输入想要插入的位置和插入元素的值:"<<endl;
cin>>index>>e;
InsertList(L,index,e);
break; case 4://获取索引为index的元素值
system("cls");
cout<<"请输入索引:"<<endl;
cin>>index;
res=GetElem(L,index,e);
if(res=="yes"){
cout<<"第"<<index<<"个数是"<<e<<endl;
} else {
cout<<"未找到该索引的值"<<endl;
}
break; case 5://删除索引为index的值
system("cls");
cout<<"请输入想要删除的数的索引:"<<endl;
cin>>index;
deleteList(L,index,e);
cout<<"第"<<index<<"个元素已经被删除!"<<endl;
break; case 6://打印链表
system("cls");
cout<<"链表内容为:"<<endl;
PrintList(L);
break; case 7://退出
return 0;
}
system("pause");//暂停
system("cls");//清屏
show();
}
} //主界面
void show(){
cout<<"+----------------------------------------+"<<endl;
cout<<"| |"<<endl;
cout<<"| 1->初始化链表 |"<<endl;
cout<<"| 2->创建链表 |"<<endl;
cout<<"| 3->插入结点 |"<<endl;
cout<<"| 4->查找结点 |"<<endl;
cout<<"| 5->删除节点 |"<<endl;
cout<<"| 6->打印链表 |"<<endl;
cout<<"| 7->退出 |"<<endl;
cout<<"| |"<<endl;
cout<<"+----------------------------------------+"<<endl;
} //初始化链表
void InitList(LinkList &L){
L=new LNode;
cout<<"链表初始化成功!"<<endl;
} //创建链表
//尾插法,最先进入的元素在最末尾
//int CreateList(LinkList &L,int n){
// cout<<"请依次输入结点的值:"<<endl;
// L->next=NULL;
// int i;
// for(i=0;i<n;i++){
// LinkList p=new LNode;
// cin>>p->data;
// p->next=L->next;
// L->next=p;
// }
// if(i!=n){
// return 0;//失败
// } else {
// return 1;//成功
// }
//} //正序创建,按照输入顺序存储
int CreateList(LinkList &L,int length){
cout<<"请依次输入结点的值:"<<endl;
LinkList p,q;
L->next=NULL;
p=L;
for(int i=0,x;i<length;i++){
LinkList q=new LNode;
cin>>x;
q->data=x;
p->next=q;
p=p->next;
}
p->next=NULL;
return 1;
} //获取第i个结点的值
string GetElem(LinkList L,int i,int &e){
LinkList p;
p=L->next;
int j=1;
while(p&&j<i){
p=p->next;
j++;
}
if(!p||j>i){
return "no";//未找到
} else {
e=p->data;
return "yes";//找到
}
} //将值为e的结点插入到第i个位置
int InsertList(LinkList &L,int i,int e){
LinkList p;
p=L;
int j=0;
while(p&&j<i-1){
p=p->next;
j++;
}
if(!p||j>i-1){
return 0; //失败
} else {
LinkList s=new LNode;
s->data=e;
s->next=p->next;
p->next=s;
return 1;//成功
}
} //删除第i个结点,并将结点的值保存到e中
int deleteList(LinkList &L,int i,int &e){
LinkList p,q;
p=L;
int j=0;
while(p->next&&j<i-1){
p=p->next;
j++;
}
if(!(p->next)&&j>i-1){
return 0;
}
q=p->next;
p->next=q->next;
e=q->data;
delete q;//释放q结点,节约空间
return e;
} //打印链表
void PrintList(LinkList L){
LinkList p;
p=L;
while(p->next){
p=p->next;
cout<<p->data<<" ";
}
cout<<endl;
}
链表(C++语言实现)的更多相关文章
- 链表c语言实现
链表(c语言实现)--------------小练习 #include <stdio.h> #include <stdlib.h> #include <string. ...
- 单链表 C语言 学习记录
概念 链接方式存储 链接方式存储的线性表简称为链表(Linked List). 链表的具体存储表示为: 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的). 链表中 ...
- C链表-C语言入门经典例题
struct student { long num; float score; struct student *next; }; 注意:只是定义了一个struct student类型,并未实际分配存储 ...
- 数据结构之链表C语言实现以及使用场景分析
牢骚:本篇博客两个星期前已经存为草稿,鉴于发生一些糟糕的事情,今天才基本完成.本人6月份应届毕业生一枚,毕业后当天来到帝都,之后也非常顺利,面试了俩家公司都成功了.一家做C++方面电商ERP,一家做w ...
- 数据结构-多级指针单链表(C语言)
偶尔看到大一时候写了一个多级链表,听起来好有趣,稍微整理一下. 稍微注意一下两点: 1.指针是一个地址,他自己也是有一个地址.一级指针(带一个*号)表示一级地址,他自身地址为二级地址.二级指针(带两个 ...
- 静态链表 C语言描述
静态链表1.下标为0的游标存放最后存放数据节点的游标,即是第一个没有存放元素(备用链表)的下标2.最后一个的节点存放第一个由数值得下标3.第一个和最后一个都不存放数据 即是备用链表的第一个的下标 4. ...
- (续)顺序表之单循环链表(C语言实现)
单循环链表和单链表的唯一区别在于单循环链表的最后一个节点的指针域指向第一个节点, 使得整个链表形成一个环. C实现代码如下: #include<stdio.h> typedef struc ...
- 静态链表C语言数据结构
静态链表就是将数组实现单链表: int Malloc_SLL(StaticLinkList space) { int i = space[0].cur;//取得第一个头节点的下标 if( space[ ...
- 约瑟夫环问题 --链表 C语言
总共有m个人在圆桌上,依次报名,数到第n个数的人退出圆桌,下一个由退出人下一个开始继续报名,循环直到最后一个停止将编号输出 #include <stdio.h>#include <s ...
随机推荐
- jQuery 请指出'.bind()','.live()'和'.delegate()'的区别
http://kb.cnblogs.com/page/94469/网上好多类似的 简言之bind可以绑定页面上已有的,live和delegate可以绑定到还未存在于页面中的元素之上.delegate又 ...
- 笔记7:winfrom的一些知识点(一)
一.MDI窗体 private void 添加窗体ToolStripMenuItem_Click(object sender, EventArgs e) { Form2 frm1 = new Form ...
- 第二周 SCRUM站立会议
站立会议是成员间每个人面对面站立着说出自己的进展,不是会议,不是写报告.是为了更好的沟通和协调,本质上是为了工程方面的团队交流. scrum站立会议的要求如下: 1.成员间都是平等的,发言没有经理和程 ...
- web标准常见问题整理
1.超链接访问过后hover样式就不出现的问题 2.FF下如何使连续长字段自动换行 3.ff下为什么父容器的高度不能自适应 4. IE6的双倍边距BUG 5. IE6下绝对定位的容器内文本无法正常选择 ...
- java.util 类 TreeSet<E>
java.lang.Object≥ java.util.AbstractCollection<E> ≥ java.util.AbstractSet<E> ≥ java.util ...
- SecureCRT从本传相片到服务器的注意事项
rz -y -be 注意,要加上参数be
- Huffman树与编码的简单实现
好久没写代码了,这个是一个朋友问的要C实现,由于不会C,就用JAVA写了个简单的.注释掉的代码属性按照原来朋友发的题里带的参数,发现没什么用就给注释掉了. package other; import ...
- sql server还原数据库文件(.bak)常见问题解决办法笔记
还原的时候出现错误:备份集中的数据库备份与现有的数据库不同 SQL Server 2005数据库还原出错错误具体信息为:备份集中的数据库备份与现有的A数据库不同 具体操作如下:第一次:新建了数据库A, ...
- TextBoxButton控件的开发实现
效果图: 实现代码: public TextBoxButton() { _button = new Button { ForeColor = System.Drawing.SystemColors.G ...
- 本地电脑localhost指向127.0.0.1的配置
windows系统电脑,我们如果想访问本机部署的项目,通常使用的是localhost来指向本机,但是有时候发现不行,我们不妨打开资源管理器,C:\Windows\System32\drivers\et ...