您的位置:首页 > 理论基础 > 数据结构算法

数据结构上机实验:单链表操作

2014-03-19 21:02 267 查看
#include <iostream>
#include <malloc.h>
using namespace std;

typedef struct Node
{
char c;
struct Node *next;
}*LinkList,LNode;

//初始化单链表h
LinkList Init(LinkList &h)
{
h=(LNode*)malloc(sizeof(LNode));
if(h==NULL)
{
cout<<"没有足够的内存空间"<<endl;
exit(0);
}
h->next=NULL;
return h;
}
//尾差法插入元素
void InsertNum(LinkList &h,int n)
{
LinkList r,s;
r=h;
for(int i=0;i<n;i++)
{
s=(LNode*)malloc(sizeof(LNode));
r->next=s;
cin>>s->c;
r=s;
}
r->next=NULL;
}
//输出单链表h
void outputLinkList(LinkList h)
{
LinkList p=h->next;
while(p!=NULL)
{
cout<<p->c<<" ";
p=p->next;
}
}
//求单链表h的长度
int GetLength(LinkList h)
{
LinkList p;
p=h->next;
int count=0;
while(p!=NULL)
{
count++;
p=p->next;
}
return count;
}
//输出单链表的长度
void outputListLength(LinkList h)
{
cout<<"当前链表的长度为: "<<GetLength(h)<<endl;
}
//判断单链表h是否为空表
void Empty(LinkList h)
{
if (h->next==NULL)
cout<<"该链表为空!"<<endl;
else
cout<<"该链表不为空!"<<endl;
}
//输出单链表h的第n个元素
void outputNthNum(LinkList h,int n)
{
int curLen=GetLength(h);
if(n<=0||n>curLen)
{
cout<<"位置输入错误!"<<endl;
exit(0);
}
else
{
LinkList p=h->next;
for(int i=1;i<n;i++)
{
p=p->next;
}
cout<<"该链表的第"<<n<<"个元素为: "<<p->c<<endl;
}
}
//输出元素a的位置
void outputNumPosition(LinkList h,char a)
{
LinkList p=h->next;
int position=1;
while(p!=NULL)
{
if(p->c==a)
{
cout<<"元素"<<a<<"在链表中的位置为 :"<<position<<endl;
}
p=p->next;
position++;
}
if(position-GetLength(h)>1)
cout<<"元素"<<a<<"在链表中不存在!"<<endl;
}
//在第N个位置上插入元素f
void InsertNumOnth(LinkList &h,int n,char a)
{
int len=GetLength(h);
if(n<=0||n>len)
{
cout<<"位置错误,不能插入!"<<endl;
exit(0);
}
else
{
LinkList p=h->next;
LinkList temp;
temp=(LNode*)malloc(sizeof(LNode));
if(n==1)
{
temp->next=p;
h->next=temp;
temp->c=a;
}
else
{
for(int i=2;i<n;i++)
{
p=p->next;
}
temp->next=p->next;//3
p->next=temp;
temp->c=a;
}
}
}
//删除链表的第n个元素
void deleteNthNum(LinkList &h,int n)
{
if(n<=0||n>GetLength(h))
{
cout<<"删除位置输入错误!"<<endl;
exit(0);
}
else
{
int j=0;
LinkList p=h,q;
while(j<n-1&&p!=NULL)
{
j++;
p=p->next;
}
q=p->next;
p->next=q->next;
free(q);
}
}
//释放链表
void freeList(LinkList &h)
{
free(h);
}

int main()
{
LinkList h;
cout<<"欢迎进入单链表操作程序,本程序提供以下操作:"<<endl;
cout<<endl;
cout<<"1.初始化链表           2.插入n个元素           3.输出单链表"<<endl;
cout<<"4.输出单链表的长度     5.输出链表的第n个元素   6.输出元素a的位置"<<endl;
cout<<"7.判断链表是否为空     8.在第n个位置插入元素f  9.删除第n个元素"<<endl;
cout<<endl;
cout<<"输入数字1~8选择您的操作,输入0退出本系统!(为保证程序顺利运行,已默认执行初始化操作)"<<endl;
cout<<"请输入数字:"<<endl;
int op;
Init(h);
while(cin>>op&&op)
{
switch(op)
{
case 2:
{
int n;
cout<<"输入n的值:";cin>>n;
cout<<"输入插入的n个数的值:";
InsertNum(h,n);
cout<<"插入成功!"<<endl;
break;
}
case 3:
{
cout<<"当前链表为:"; outputLinkList(h);
cout<<endl;break;

}
case 4:
{
outputListLength(h);break;
}
case 5:
{
int n;
cout<<"输入n的值:";cin>>n;
outputNthNum(h,n);break;
}
case 6:
{
char a;
cout<<"输入a的值:";cin>>a;
outputNumPosition(h,a);break;
}
case 7:
{
Empty(h);break;
}
case 8:
{
int n;char f;
cout<<"输入n的值: ";cin>>n;
cout<<"输入f的值: ";cin>>f;
InsertNumOnth(h,n,f);
cout<<"插入成功!"<<endl;
break;
}
case 9:
{
int n;
cout<<"输入n的值: ";cin>>n;
deleteNthNum(h,n);
cout<<"删除成功!"<<endl;
break;
}
}
}
return 0;
}


运行:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: