#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
using namespace std;
typedef struct Node
{
struct Node *next;
int l;//线性表的长度
int data;
} Node;
Node *head,*head1,*tail,*p,*q;
int S,n;
void Showmain()
{
cout<<"----------------------"<<endl;
cout<<"线性表的顺序表示与实现"<<endl;
cout<<"1.线性表的建立"<<endl;
cout<<"2.线性表元素的插入"<<endl;
cout<<"3.线性表元素的删除"<<endl;
cout<<"4.逆序建立链表"<<endl;
cout<<"5.线性表元素的查找"<<endl;
cout<<"6.线性表元素的合并"<<endl;
cout<<"0.退出程序"<<endl;
cout<<"请输入选择"<<endl;
}
void Creat()
{
cout<<"请输入要创建线性表的长度"<<endl;
cin>>n;
head=(Node *)malloc(sizeof(Node));
head->l=n;
head->next=NULL;
tail=head;
cout<<"开始创建长度为"<<n<<"的线性表"<<endl;
for(int i=1; i<=n; i++)
{
p=(Node *)malloc(sizeof(Node));
if(!p)
{
break;
}
p->next=NULL;
p->l=n;
cin>>p->data;
tail->next=p;
tail=p;
}
}
void display()
{
p=head;
while(p->next!=NULL)
{
p=p->next;
cout<<p->data<<" ";
}
cout<<endl;
}
int inserch()
{
int wei;
cout<<"请输入插入元素的位置"<<endl;
cin>>wei;//插入元素操作
if(wei<1||wei>n)
{
return -1;
}
p=head;
p->l+=1;
for(int i=1; i<=n; i++)
{
if(i==wei)
{
q=(Node *)malloc(sizeof(Node));
q->next=NULL;
q->l+=1;
cout<<"插入元素的值"<<endl;
cin>>q->data;
q->next=p->next;
p->next=q;
break;
}
p=p->next;
}
++n;
return 0;
}
void delet()
{
int wei;
cout<<"删除元素的位置"<<endl;
cin>>wei;
p=head;
q=head->next;
for(int i=1; i<=n; i++)
{
if(i==wei)
{
p->next=q->next;
free(q);
break;
}
p=q;
q=q->next;
}
--n;
}
void nixu()
{
int geshu,i;
cout<<"请输入要插入元素的个数 :"<<endl;
cin>>geshu;
Node *head5,*pp;
head5=new Node;
head5->l=geshu;
head5->next=NULL;
for(i=1;i<=geshu;i++)
{
pp=new Node;
cin>>pp->data;
pp->l=geshu;
pp->next=head5->next;
head5->next=pp;
}
for(pp=head5->next;pp!=NULL;pp=pp->next)
{
if(pp==head5->next) cout<<pp->data;
else cout<<" "<<pp->data;
}
cout<<endl;
}
void cha()
{
cout<<"查找线性表中的元素"<<endl;
int flag=0;
int wei;
cin>>wei;
p=head->next;
for(int i=1; i<=n; i++)
{
if(p->data==wei)
{
cout<<"此线性表含有此元素"<<endl;
flag=1;
break;
}
p=p->next;
}
if(flag==0)
cout<<"此线性表没有这个元素"<<endl;
}
void hebing()
{
cout<<"请新建一个线性表"<<endl;
cout<<"请输入要新建线性表的长度"<<endl;
cin>>n;
head1=(Node *)malloc(sizeof(Node));
head1->l=n+head->l;
head1->next=NULL;
tail=head1;
cout<<"开始创建长度为"<<n<<"的线性表"<<endl;
for(int i=1; i<=n; i++)
{
p=(Node *)malloc(sizeof(Node));
if(!p)
{
break;
}
p->next=NULL;
p->l=n+head->l;
cin>>p->data;
tail->next=p;
tail=p;
}
tail=head;
p=tail->next;
while(p!=NULL)
{
tail=p;
p=p->next;
}
tail->next=head1->next;
free(head1);
}
int main()
{
Showmain();
while(scanf("%d",&S)!=EOF)
{
if(S==0)
{
break;
}
else if(S==1)//创建链表
{
Creat();
display();
}
else if(S==2)//插入元素
{
int tt=inserch();
if(tt==0)
display();
else if(tt==-1)
{
cout<<"插入有误,程序不进行插入操作"<<endl;
}
}
else if(S==3)
{
delet();
display();
}
else if(S==4)
{
nixu();
}
else if(S==5)
{
cha();
display();
}
else if(S==6)
{
hebing();
display();
}
Showmain();
}
return 0;
}
作业1:
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
struct node
{
int l;//线性表的所存具体元素的个数
int data;
} q[10001];
void Showmain()
{
cout<<"1.创建线性表"<<endl;
cout << "2.输出元素" << endl;
cout << "3.插入元素" << endl;
cout << "4.删除元素" << endl;
cout << "5.查找元素" << endl;
cout << "6.合并函数" << endl;
cout << "0.退出操作" << endl;
cout << "请输入要选择的操作:";
}
void jianli()
{
int i,geshu;
cout<<"请输入要建立顺序表的元素个数:";
cin>>geshu;
cout<<"请输入该顺序表的元素:";
for(i=1; i<=geshu; i++)
{
cin>>q[i].data;
q[i].l=geshu;
}
cout<<"已成功建立顺序表"<<endl;
}
void display()
{
int i;
for(i=1; i<=q[1].l; i++)
{
if(i==1)
cout << q[i].data;
else cout<<" "<<q[i].data;
}
cout << endl;
}
void inseart()
{
int t,b,i;
cout<<"请输入在第几个元素前插入新元素:";
cin>>t;
for(int i=1; i<=q[1].l; i++) //线性表长度+1
q[i].l+=1;
cout<<"请输入要插入的元素:";
cin>>b;
for(i=q[1].l; i>t; i--)
{
q[i].data=q[i-1].data;
}
q[t].data=b;
cout<<"已成功插入新元素"<<endl;
}
void delet()
{
int i,b,j,flag=0;;
cout<<"请输入要删除的元素:";
cin>>b;
for(i=1; i<=q[1].l; i++)
{
if(q[i].data==b)
{
flag=1;
q[1].l-=1;//线性表长度-1
for(j=i; j<=q[1].l; j++)
{
q[j].data=q[j+1].data;
}
}
}
for(i=2; i<=q[1].l; i++) //线性表长度-1
{
q[i].l=q[1].l;
}
if(flag==1)
{
cout<<"删除成功"<<endl;
}
else
{
cout<<"没有找到该元素,删除失败"<<endl;
}
}
void chazhao()
{
int t,i,flag=0;
cout<<"请输入要查找的元素:";
cin>>t;
for(i=1; i<=q[1].l; i++)
{
if(q[i].data==t)
{
flag=1;
cout<<"您所查找的元素为第"<<i<<"个"<<endl;
break;
}
}
if(flag==0)
{
cout<<"没有找到该元素,查找失败"<<endl;
}
}
void hebing()
{
int i,j,m,t;
int b[10001];
cout<<"请输入您要合并的另一个顺序表的个数:";
cin>>m;
t=q[1].l;
q[1].l=q[1].l+m;
for(int i=1; i<=q[1].l; i++)
{
q[i].l=q[1].l;
}
cout<<"请输入另一个顺序表的元素:";
for(i=1; i<=m; i++)
{
cin>>b[i];
}
j=1;
for(i=t+1; i<=q[1].l; i++)
{
q[i].data=b[j++];
}
}
int main()
{
int choose;
Showmain();
while(cin>>choose)
{
if(choose==1)
{
jianli();
}
else if(choose==2)
{
display();
}
else if(choose==3)
{
inseart();
}
else if(choose==4)
{
delet();
}
else if(choose==5)
{
chazhao();
}
else if(choose==6)
{
hebing();
}
else if(choose==0)
{
cout<<"退出系统"<<endl;
break;
}
Showmain();
}
return 0;
}