顺序表的一些简单功能
#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; }