链表操作
来源:互联网 发布:企业用电管理系统源码 编辑:程序博客网 时间:2024/05/16 05:52
#include<iostream>
#include<malloc.h>
using namespace std;
typedef struct hNode
{
char data;
struct hNode *next;
}LinkList;
//初始化单链表h
void InitList(LinkList *&h)
{
h= (LinkList *)malloc(sizeof(LinkList));
h->next = NULL;
}
//尾插法插入元素
void CreateListR(LinkList *&h)
{
LinkList *s,*r;
char a[5]={'a','b','c','d','e'};
int i;
h=(LinkList *)malloc(sizeof(LinkList));
r=h;
for(i=0;i<5;i++) //尾插法把元素插入链表
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data = a[i];
r->next = s;
r=s;
}
r->next=NULL;
}
//输出单链表
void DispList(LinkList *h)
{
LinkList *p = h->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
}
//输出单链表的长度
int Listlength(LinkList *h)
{
int n=0;
LinkList *p = h->next;
while(p!=NULL)
{
n++;
p=p->next;
}
cout<<"the list's length is "<<n<<endl;
return 0;
}
//判断单链表是否为空
bool ListEmpty(LinkList *h)
{
if(h->next == NULL)
{
cout<<"List is empty~!";
return false;
}
else
{
cout<<"List is not empty";
return true;
}
cout<<endl;
}
//输出单链表的第三个元素
char GetElem(LinkList *h)
{
int j=0;
char three;
LinkList *p = h;
while(j<3)
{
j++;
p=p->next;
}
if(p==NULL)
cout<<"不存在第三个元素"<<endl;
else
{
three = p->data;
cout<<"the third is "<<three<<endl;
}
return 0;
}
//输出元素a的位置
int LocateElem(LinkList *h)
{
int i=1;
char a='a';
LinkList *p = h->next; //指针指向第一个节点
while(p!=NULL&&p->data!=a)
{
p=p->next;
i++;
}
if(p==NULL)
cout<<"不存在元素a"<<endl;
else
cout<<"a is the "<<i<<" in the list"<<endl;
return 0;
}
//在第四个元素位置上插入元素f
bool ListInsert(LinkList *&h)
{
int j=0;
char f='f';
LinkList *p =h,*s;
while(j<3 && p!=NULL)
{
j++;
p=p->next;
}
if(p == NULL)
{
cout<<"List is empty"<<endl;
return false;
}
else //增加一个数据域为f的节点,插入链表
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data = f;
s->next = p->next;
p->next = s;
cout<<"Insert done"<<endl;
return true;
}
}
//删除第三个元素
bool ListDelete(LinkList *&h)
{
int j=0;
char third;
LinkList *p = h,*q;
while(j<2 && p!=NULL)
{
j++;
p = p->next;
}
if(p == NULL)
{
cout<<"List is empty"<<endl;
return false;
}
else
{
q = p->next;
if(q == NULL)
{
cout<<"Error"<<endl;
return false;
}
else //删除第三个节点,原来第二个和第四个节点相连
{
third = q->data;
p->next = q->next;
delete(q);
cout<<"deleted done"<<endl;
return true;
}
}
}
//释放单链表
void DistoryList(LinkList *&h)
{
LinkList *pre = h,*p = pre->next;
while(p!= NULL)
{
delete(pre);
pre=p;
p=pre->next;
}
delete(pre);
cout<<"List gone"<<endl;
}
int main()
{
LinkList *h=NULL;
int n;
cout<<"~~ 第一次操作需先进行初始化 ~~"<<endl;
cout<<" 请选择以下操作:"<<endl;
cout<<"1、初始化顺序表 "<<endl;
cout<<"2、尾插法插入元素"<<endl;
cout<<"3、输出链表中的元素"<<endl;
cout<<"4、输出链表的长度"<<endl;
cout<<"5、判断链表是否为空 "<<endl;
cout<<"6、输出单链表的第三个元素"<<endl;
cout<<"7、输出第一个值为a的元素的位置 "<<endl;
cout<<"8、在第四个元素位置上插入f"<<endl;
cout<<"9、删除第三个元素"<<endl;
cout<<"10、释放链表"<<endl;
cout<<"按其它键退出"<<endl;
while(cin>>n)
{
switch(n)
{
case 1:
InitList(h);
cout<<"You can continue."<<endl;break;
case 2:
CreateListR(h);
cout<<"List have been created."<<endl;break;
case 3:
DispList(h);
cout<<endl;break;
case 4:
Listlength(h);break;
case 5:
ListEmpty(h);
cout<<endl;break;
case 6:
GetElem(h);break;
case 7:
LocateElem(h);break;
case 8:
ListInsert(h);break;
case 9:
ListDelete(h);break;
case 10:
DistoryList(h);break;
default:
exit(0);
}
}
return 0;
}
- 实现链表基本操作(简单操作)
- 链表操作源程序
- 链表操作
- C++ 链表操作
- 链表的操作
- 链表操作源程序
- 链表的操作
- 链表的操作
- C++链表操作
- 链表操作
- 链表操作
- 链表基本操作
- LinkList链表操作
- 合并链表操作
- 链表简单操作
- 链表的操作
- 链表操作
- 操作链表
- Android的动画
- 第一次开始记录!!
- git的ignore文件详解
- Ubuntu 数字小键盘不能用解决方法
- 加减号在google搜索中的应用
- 链表操作
- 若菜acmer感觉自己智商完全被碾压了QAQ~~
- 写一个函数,完成内存之间的拷贝
- 【刷题小记】用数组模拟约瑟夫环
- oracle恢复工具
- syslog函数处理-keepalived源码解析
- 解决PopupWindow获得焦点后按键无响应的问题(参考前辈后有问题)
- Train Problem I.cpp
- Struts2、hibernate和spring整合及源码下载