数据结构上机实验(二)

来源:互联网 发布:搜索下载 python 实现 编辑:程序博客网 时间:2024/05/17 06:33

1、编写一个程序,实现顺序表的各种基本运算(假设顺序表的元素类型char),并在此基础上设计一个程序,完成以下功能:

(1)

(1)初始化顺序表L;

(2)采用尾插法依次插入元素a,b,c,d,e;

(3)输出顺序表L;

(4)输出顺序表L的长度;

(5)判断顺序表L是否为空;

(6)输出顺序表L的第3个元素;

(7)输出元素a的位置;

(8)在第4个元素位置上插入元素f;

(9)输出顺序表L;

(10)删除L的第3个元素;

(11)输出顺序表L;

(12)释放顺序表L。

代码:

import java.util.Scanner;class Sqlist {char[] data;int length;// public void SqInit() {// length=0;// }void InitList(Sqlist l){l.length=0;}void CreatList(Sqlist l,char [] a,int n) {l.length = n;l.data=new char[1000];for(int i=0;i<n;i++){l.data[i]=a[i];}}int getListLength(Sqlist l){return l.length;}    boolean ListEmpty(Sqlist l){    return(l.length==0);    }    char GetElem(Sqlist l,int i){    return l.data[i];    }    int LocateElem(Sqlist l,char e){    int i=0;    while(i<l.length&&l.data[i]!=e)    i++;    if(i>l.length)return 0;    else return i+1;    }    boolean ListInsert(Sqlist l,int i,char e){    int j;    int len=l.length+1;    if(i<1||i>l.length+1)    return false;    i--;    for(j=l.length;j>i;j--)    l.data[j]=l.data[j-1];    l.data[i]=e;    l.length++;    return true;    }boolean ListDelet(Sqlist l, int i) {int j;if(i<1||i>l.length)return false;i--;//e=l.data[i];for(j=i;j<l.length-1;j++)l.data[j]=l.data[j+1];l.length--;return true;}void Displist(Sqlist l){for(int i=0;i<l.length;i++){System.out.print(l.data[i]+" ");}}}public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner in = new Scanner(System.in);//int n = in.nextInt();Sqlist l = new Sqlist();char[] a=new char[5];for(int i=0;i<5;i++)a[i]=(char)(i+'a');System.out.println("初始化顺序表L");l.InitList(l);l.CreatList(l,a,5);System.out.print("依次采用尾插法插入");l.Displist(l);System.out.println("元素");System.out.print("输出顺序表:");l.Displist(l);System.out.println();System.out.println("顺序表L的长度="+l.getListLength(l));if(l.ListEmpty(l))System.out.println("顺序表L为非空");elseSystem.out.println("顺序表L为空");System.out.print("查找第i个元素,请输入i:");int i=in.nextInt();System.out.println("顺序表L的第"+i+"个元素="+l.GetElem(l,i));System.out.print("查找元素ch的位置,请输入ch:");char ch=in.next().charAt(0);System.out.println("元素"+ch+"所在的位置="+l.LocateElem(l, ch));System.out.print("在第m个位置上查入元素查ch1,请输入m和ch1:");int m=in.nextInt();char ch1=in.next().charAt(0);l.ListInsert(l, m, ch1);System.out.print("输出顺序表:");l.Displist(l);System.out.print("删除L的第x个元素,请输入x:");int x=in.nextInt();l.ListDelet(l, x);System.out.print("输出顺序表:");l.Displist(l);System.out.println();System.out.println("释放顺序表L");}}


2、

编写一个程序exp2-2.cpp,实现单链表的各种基本运算(假设单链表的元素类型为char),并在此基础上完成如下功能:

(1)初始化单链表h;

(2)采用尾插法依次插入元素a,b,c,d,e;

(3)输出单链表h;

(4)输出单链表h长度;

(5)判断单链表h是否为空;

(6)输出单链表h的第3个元素;

(7)输出元素a的位置;

(8)在第4个元素位置上插入元素f;

(9)输出单链表h;

(10)删除h的第3个元素;

(11)输出单链表h;

代码:

#include <iostream>#include <cstring>#include <malloc.h>using namespace std;typedef struct Node{    char data;    struct Node *next;}LinkList;void InitList(LinkList *&l){    l=(LinkList *)malloc(sizeof(LinkList));    l->next=NULL;}void CreateListF(LinkList *&l,char a[],int n){    LinkList *s,*r;    int i;    l=(LinkList *)malloc(sizeof(LinkList));    r=l;    for(i=0;i<n;i++)    {        s=(LinkList *)malloc(sizeof(LinkList));        s->data=a[i];        r->next=s;        r=s;    }    r->next=NULL;}void DistList(LinkList *&l){    LinkList *p=l->next;    while(p!=NULL)    {       cout<<p->data<<" ";       p=p->next;    }    cout<<endl;}int ListLength(LinkList *l){    int n=0;    LinkList *p=l;    while(p->next!=NULL)    {        n++;        p=p->next;    }    return n;}bool ListEmpty(LinkList *l){    return (l->next==NULL);}char GetElem(LinkList *l,int i){    int j=0;    LinkList *p=l;    while(p!=NULL)    {        j++;        p=p->next;        if(j==i)            break;    }    return p->data;}int LocateElem(LinkList *l,char e){    int i=1;    LinkList *p=l->next;    while(p!=NULL&&p->data!=e)    {        p=p->next;        i++;    }    if(p==NULL)        return 0;    else        return i;}bool ListInsert(LinkList *l,int i,char e){    int j=0;    LinkList *p=l,*s;    while(j<i-1&&p!=NULL)    {        j++;        p=p->next;    }    if(p==NULL)        return false;    else    {        s=(LinkList *)malloc(sizeof(LinkList));        s->data=e;        s->next=p->next;        p->next=s;        return true;    }}bool DeleList(LinkList *l,int i,char e){    int j=0;    LinkList *p=l,*q;    while(j<i-1&&p!=NULL)    {        j++;        p=p->next;    }    if(p==NULL)        return false;    else    {        q=p->next;        if(q==NULL)            return false;        e=q->data;        p->next=q->next;        free(q);        return true;    }}int main(){    LinkList *l;    char a[]={'a','b','c','d','e'};    cout<<"(1)初始化单链表"<<endl;    InitList(l);    cout<<"(2)采用尾查法依次插入元素a,b,c,d,e"<<endl;    CreateListF(l,a,5);    cout<<"(3)输出单链表L:";    DistList(l);    cout<<"(4)输出单链表的长度=";    cout<<ListLength(l)<<endl;    cout<<"(5)判断单链表L是否为空:";    if(ListEmpty(l))        cout<<"是空单链表"<<endl;    else        cout<<"非空单链表"<<endl;    cout<<"(6)输出单链表L的第3个元素:"<<GetElem(l,3)<<endl;    cout<<"(7)输出元素a的位置:"<<LocateElem(l,'a')<<endl;    cout<<"(8)在第4个元素的位置上插入元素f"<<endl;    ListInsert(l,4,'f');    cout<<"(9)输出单链表L:";    DistList(l);    cout<<"(10)删除L的第三个元素:"<<endl;    DeleList(l,3,'a');    cout<<"(11)输出单链表L:";    DistList(l);    return 0;}


0 0
原创粉丝点击