1. 程式人生 > >線性表及多項式的運算(實驗一)

線性表及多項式的運算(實驗一)

打包成zip包。
學號,姓名,專案名

readme檔案
1.給出需求書,使用者需要什麼需求
2.詳細設計要求,給出架構,功能設計,資料庫設計,UI介面設計
3.定義標頭檔案,給出.h,.cpp,.exe檔案
4.測試報告,單鏈表給出多個測試報告,使用資料要不一樣。給出測試案例。隨機數10個數。
5.軟體使用說明書,在什麼結構下使用,什麼環境下,按什麼流程,怎麼使用。
6.實驗報告

code

可執行檔案
執行可執行檔案時候,裡面要有姓名和學號。
******************************-
姓名
學號
專案名稱
日期
版本號碼
*******************************

-

實驗要求:
1.完成順序表的初始化,查詢,插入,刪除,輸出,撤銷。

#include<iostream>
using namespace std;
typedef int ElementType;
typedef int Status;

//數序表的儲存
typedef struct{
    int n;              //順序表的長度
    int maxLength;      //順序表的最大長度
    ElementType *element;   //儲存空間的首地址
}seqList;

//順序表的初始化
Status Init(seqList *l,int
msize){ l->maxLength=msize; l->n=0; l->element=(ElementType *)malloc(sizeof(ElementType )*msize); if(!l->element){ return 0; } return 1; } //順序表的插入,插入的位置為i+1的位置,插入的元素是x Status Insert(seqList *l,int i,int x){ if(i<-1||i>l->n-1) return 0; //插入的位置不存在
if(l->n==l->maxLength) return 0; //線性表已經滿了 //後移 for(int j=l->n-1;j>i;i--){ l->element[j+1]=l->element[j];} //插入 l->element[i+1]=x; l->n++; return 1; } //順序表的列印 Status Output(seqList l){ if(!l.n) return 0; //連結串列不為空 for(int i=0;i<l.n-1;i++){ cout<<l.element[i];} cout<<endl; return 1; } //刪除順序表 Status Destroy(seqList *l){ l->n=0; l->maxLength=0; free(l->element); return 1; } //順序表的元素的刪除,下標為i Status Delete(seqList *l,int i){ if(i<0||i>l->n-1) return 0; //越界 for(int j=i;j<l->n;j++){ l->element[j]=l->element[j+1];} l->n--; return 1; } //順序表的儲存 Status Find(seqList l,int i,ElementType *x){ if(i<0||i>l.n-1) return 0; *x=l.element[i]; //取出下標為i的元素,通過x返回 return 1; } int main(){ int x; seqList list; Init(&list,10); for(int i=0;i<9;i++){ Insert(&list,i-1,i); } Find(list,3,&x); cout<<x<<endl; Output(list); Delete(&list,0); Output(list); Destroy(&list); return 0; }

2.完成帶表頭結點單鏈表的初始化,查詢,插入,刪除,輸出,撤銷。

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
typedef int ElementType;
typedef int Status;
typedef struct node{
    ElementType value; //資料域
    struct node *link; //指標域
}node;
typedef struct{
    struct node *head;  //頭指標
    int n;              //連結串列的真實長度
}Headerlist;

Status Init(Headerlist *l){
    l->head=(node *)malloc(sizeof(node));
    if(!l->head) return 0;   //申請空間失敗 
    l->n=0;
    l->head->link=NULL;   
    return 1;
}

//在下標為i+1的位置插入x 
Status Insert(Headerlist *l,int i,ElementType x){
    if(i<-1 ||i>l->n-1) return 0;

    node *q=l->head;
    for(int j=0;j<=i;j++) q=q->link; //q是待插入結點的前驅結點,ai

    node *p;            //生成帶插入的結點 
    p=(node *)malloc(sizeof(node ));
    p->value=x; 

    p->link=q->link;
    q->link=p;
    l->n++;
    return 1;
}

Status Output(Headerlist l){
    if(!l.n) return 0;  //空連結串列
    node *p=l.head->link;
    while(p){
        cout<<p->value<<" ";
        p=p->link;
    } 
    cout<<endl;
    return 1;
}
//刪除下標為i的元素 
Status Delete(Headerlist *l,int i){
    if(i<0||i>l->n-1) return 0;
    if(!l->n) return 0;
    node *p,*q;
    p=l->head;
    for(int j=0;j<=i-1;j++) p=p->link;  //p是待刪除結點的前驅結點
    q=p->link;      //q是待刪除結點
    p->link=q->link; 
    free(q);
    l->n--;
    return 1;
}

//查詢下標為i的元素,通過x返回 
Status Find(Headerlist l,int i,ElementType *x){
    if(i<0||i>l.n-1) return 0;
    node *p;
    p=l.head;
    for(int j=0;j<=i;j++) p=p->link;
    *x=p->value;
    return 1; 
}

int main(){
    int i,x;
    Headerlist list;
    Init(&list);
    for(int i=0;i<9;i++){
        Insert(&list,i-1,i);
    }
    cout<<"the headerlist is :"<<endl;
    Output(list);
    Delete(&list,0);
    cout<<"the headerlist is: "<<endl;
    Output(list);
    Find(list,0,&x);
    cout<<"the value is :";
    cout<<x<<endl;
    return 0;
}

3.以第二題帶表頭結點單鏈表為儲存結構,編寫程式碼,實現單鏈表的逆置操作。

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
typedef int ElementType;
typedef int Status;
typedef struct node{
    ElementType value; //資料域
    struct node *link; //指標域
}node;
typedef struct{
    struct node *head;  //頭指標
    int n;              //連結串列的真實長度
}Headerlist;

Status Init(Headerlist *l){
    l->head=(node *)malloc(sizeof(node));
    if(!l->head) return 0;   //申請空間失敗 
    l->n=0;
    l->head->link=NULL;   
    return 1;
}

//在下標為i+1的位置插入x 
Status Insert(Headerlist *l,int i,ElementType x){
    if(i<-1 ||i>l->n-1) return 0;

    node *q=l->head;
    for(int j=0;j<=i;j++) q=q->link; //q是待插入結點的前驅結點,ai

    node *p;            //生成帶插入的結點 
    p=(node *)malloc(sizeof(node ));
    p->value=x; 

    p->link=q->link;
    q->link=p;
    l->n++;
    return 1;
}

Status Output(Headerlist l){
    if(!l.n) return 0;  //空連結串列
    node *p=l.head->link;
    while(p){
        cout<<p->value<<" ";
        p=p->link;
    } 
    cout<<endl;
    return 1;
}

//帶表頭連結串列的逆置
Status Reverse(Headerlist *L){
    node *p,*s,*t;
    p=L->head;
    s=p->link;
    while(s->link){
        t=s->link;
        s->link=p;
        p=s;
        s=t;
    }
    s->link=p;  //處理最後一個結點
    L->head->link->link=NULL; 
    L->head->link=s; 
    return 1;
} 

int main(){
    int i,x;
    Headerlist list;
    Init(&list);
    for(int i=0;i<9;i++){
        Insert(&list,i-1,i);
    }
    cout<<"The original headerlist is : "<<endl;
    Output(list);
    Reverse(&list);
    cout<<"After reversion,the heaserlist is: "<<endl;
    Output(list);
    return 0;
}

4.以第二題所表示的帶表頭結點的單鏈表為儲存結構,實現單鏈表排序成為有序連結串列的操作。

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
typedef int ElementType;
typedef int Status;
typedef struct node{
    ElementType value; //資料域
    struct node *link; //指標域
}node;
typedef struct{
    struct node *head;  //頭指標
    int n;              //連結串列的真實長度
}Headerlist;

Status Init(Headerlist *l){
    l->head=(node *)malloc(sizeof(node));
    if(!l->head) return 0;   //申請空間失敗 
    l->n=0;
    l->head->link=NULL;   
    return 1;
}

//在下標為i+1的位置插入x 
Status Insert(Headerlist *l,int i,ElementType x){
    if(i<-1 ||i>l->n-1) return 0;

    node *q=l->head;
    for(int j=0;j<=i;j++) q=q->link; //q是待插入結點的前驅結點,ai

    node *p;            //生成帶插入的結點 
    p=(node *)malloc(sizeof(node ));
    p->value=x; 

    p->link=q->link;
    q->link=p;
    l->n++;
    return 1;
}

Status Output(Headerlist l){
    if(!l.n) return 0;  //空連結串列
    node *p=l.head->link;
    while(p){
        cout<<p->value<<" ";
        p=p->link;
    } 
    cout<<endl;
    return 1;
}

//帶表頭連結串列的逆置
Status Reverse(Headerlist *L){
    node *p,*s,*t;
    p=L->head;
    s=p->link;
    while(s->link){
        t=s->link;
        s->link=p;
        p=s;
        s=t;
    }
    s->link=p;  //處理最後一個結點
    L->head->link->link=NULL; 
    L->head->link=s; 
    return 1;
} 

Status ListSort(Headerlist *l){
    int i=0,j=0;
    node *p,*q;
    node *s=l->head;
    //如果連結串列是空之間返回
    if(l->n==0 ) return 0;
    //採用氣泡排序 
    for(i=0;i<l->n-1;i++){
        s=l->head->link;
        for(j=0;j<l->n-i-1;j++){
            p=s;
            q=s->link;
            //如果前面的比後面的大,就交換他們之間的資料域
            if(p->value>q->value){
                ElementType temp=p->value;
                p->value=q->value;
                q->value=temp; 
        }
            s=s->link;
        }
    } 
}

int main(){
    int i,x;
    Headerlist list;
    Init(&list);
    for(int i=0;i<9;i++){
        Insert(&list,i-1,i);
    }
    cout<<"The original headerlist is : "<<endl;
    Output(list);
    //逆置 
    Reverse(&list);
    cout<<"After reversion,the heaserlist is: "<<endl;
    Output(list);
    //排序 
    ListSort(&list);
    cout<<"The sorted headerlist is:"<<endl;
    Output(list);
    return 0;
}

5.編寫程式實現一元多項式的建立,輸出,撤銷以及兩個一元多項式相加和相乘的操作。

相關推薦

線性多項式運算實驗

打包成zip包。 學號,姓名,專案名 readme檔案 1.給出需求書,使用者需要什麼需求 2.詳細設計要求,給出架構,功能設計,資料庫設計,UI介面設計 3.定義標頭檔案,給出.h,.cpp,.exe檔案 4.測試報告,單鏈表給出多個測試報告,使用

Docker 基於centos7 的LAMP環境搭建 實驗

docker mysql docke docker centos7 前言 為方便其他開源軟件的配置實驗,利用docker技術基於centos7 系統搭建了lamp 環境,其中將部署mysql 、apache、php5.6。提供基礎的數據存儲,還將部署phpmyadmin 、memadmi

第十四周專案1線性的折半查詢迴圈法

/*Copyright (c) 2015, 煙臺大學計算機與控制工程學院 * All rights reserved. * 檔名稱:H1.cpp * 作者:辛志勐 * 完成日期:2015年12月2日 * 版本號:VC6.0 * 問題描述:線性表的折半查詢(迴圈法) * 輸入描述:無 * 程式輸出:圖

java錯誤分析之junit測試錯誤實驗

  本文轉自:https://www.cnblogs.com/anny0404/p/5275595.html 在原作者的基礎上進行部分新增,也很感謝原作者這篇博文,幫我分析與解決問題!     原文:

有序線性的有序合併 c語言

題目描述 已知線性表 LA 和 LB 中的資料元素按值非遞減有序排列,現要求將 LA 和 LB 歸併為一個新的線性表 LC, 且 LC 中的資料元素仍然按值非遞減有序排列。例如,設LA=(3,5,8,11) ,LB=(2,6,8,9,11,15,20) 則 LC

第二章作業題2-連結串列-計算機17級 7-3 jmu-ds-單鏈的基本運算 15 分

7-3 jmu-ds-單鏈表的基本運算 (15 分) 實現單鏈表的基本運算:初始化、插入、刪除、求表的長度、判空、釋放。 (1)初始化單鏈表L,輸出L->next的值; (2)依次採用尾插法插入元素:輸入分兩行資料,第一行是尾插法需要插入的字元資料的個數,第二行是具體

桂電-數學與計算科學學院-《資料結構實驗-寧黎華編》實驗

實驗一:順序表的基本操作 1、實驗目的 (1) 掌握順序表的基本運算,熟悉對順序表的一些基本操作和具體函式的定義。 (2) 掌握順序儲存的概念,學會定義線性表的順序儲存型別。 (3) 熟悉c語言程式的基本結構,掌握程式中的使用者標頭檔案、實現檔案和主檔案之間的相

QT、VS常見bug解決辦法—— fatal error LNK1201:寫入程式資料庫“***.pdb”時出錯;請檢查是否是磁碟空間不足、路徑無效或許可權不夠

 問題:         fatal error LNK1201:寫入程式資料庫“***.pdb”時出錯;請檢查是否是磁碟空間不足、路徑無效或許可權不夠  最近用opencv2.4.10、vs2010做開發經常遇到這個問題,經百度發現大部分是vs自己的問題 解決辦法1:

7-1 jmu-ds-單鏈的基本運算 15 分

實現單鏈表的基本運算:初始化、插入、刪除、求表的長度、判空、釋放。(1)初始化單鏈表L,輸出L->next的值;(2)依次採用尾插法插入元素:輸入分兩行資料,第一行是尾插法需要插入的字元資料的個數,第二行是具體插入的字元資料。(3)輸出單鏈表L;(4)輸出單鏈表L的長度;(5)判斷單鏈表L是否為空;(6

jmu-ds-迴圈單鏈的基本運算 15 分

實現迴圈單鏈表的基本運算:初始化、插入、刪除、求表的長度、判空、釋放。 (1)初始化迴圈單鏈表L,輸出(L->next==L)的邏輯值; (2)依次採用尾插法插入元素:輸入分兩行資料,第一行是尾插法需要插入的字元資料的個數,第二行是具體插入的字元資料。 (3)輸出迴圈單鏈表L; (4)輸出

C語言scanf()函式返回值的問題實驗

不經意中發現scanf()的返回值問題,自己試驗和了解了一下,一些所知與各位分享; void main()  {  int a; int b; int c; printf("請輸入三個整數:"); int x=scanf("%d%d%d",&a,&b,&c); printf("%d/n

更新線性基礎知識精煉Java描述

1. 可以對線性表做些什麼呢? 往線性表末尾插入一個新元素在任意位置插入新元素,比如起始位置,末尾或者元素之間可以刪除一個元素可以刪除所有元素可以檢視任意元素可以測定線性表是否包含一個特定的元素統計線性表中的元素數目可以測定線性表是空的還是滿的可以顯示線性表中的所有元素 2

各種內排序演算法的實現效能比較實驗

1.編寫演算法,分別實現順序表的簡單選擇排序、直接插入排序、氣泡排序、快速排序、兩路合併排序以及堆排序。 2.編寫演算法,利用隨機函式,在檔案中隨機生成n個關鍵字。 3.編寫程式,分別簡單驗證簡單隨

數據結構嚴蔚敏、吳偉民——讀書筆記-2、 線性及其基本運算、順序存儲結構

content pri 線性 時間復雜度 length 將他 ron 個數 p s 第二章 線性表 2.1 線性表及其基本運算 2.2 線性表的順序存儲結構 2.3 線性表的鏈式存儲結構 1、線性表:是n個數據元素的有限序列。

第三周——項目—順序的基本運算3

.com zzu 貢獻 userinfo get cor xor vmw left 乒接鍬綱仆油芬郵撾贅當http://www.docin.com/easin122 懷關嬌子識拋柏燦講燎http://www.docin.com/pssf18177 拱靶市古紫谷坦搜蔥滴曬

山東大學機器學習實驗內容——線性迴歸

1. 描述 第一個練習將為你提供線性迴歸練習。這些練習已經用Matlab進行了廣泛的測試,但它們也應該在Octave中工作,它被稱為“免費版的Matlab”。如果你使用的是Octave,那就是 一定要安裝Image包(可在Windows中作為選項使用)安裝程式,

02-線性結構2 一元多項式的乘法與加法運算 20 分

設計函式分別求兩個一元多項式的乘積與和。 輸入格式: 輸入分2行,每行分別先給出多項式非零項的個數,再以指數遞降方式輸入一個多項式非零項係數和指數(絕對值均為不超過1000的整數)。數字間以空格分隔。 輸出格式: 輸出分2行,分別以指數遞降方式輸出乘積多項式以及和多項

02 線性結構2 一元多項式的乘法與加法運算python實現

前言:這幾天正在學習資料結構,整理課後習題。 題目: 設計函式分別求兩個一元多項式的乘積與和。 輸入格式: 輸入分2行,每行分別先給出多項式非零項的個數,再以指數遞降方式輸入一個多項式非零項係數和指數(絕對值均為不超過1000的整數)。數字間以空格分隔。 輸出格

每天個數據結構-----線性的鏈式單鏈儲存結構

// //  main.c //  LinkList // //  Created by Jacobs.Guo on 2018/4/3. //  Copyright © 2018年 yage guo. All rights reserved.

第三週實踐專案1--順序的基本運算3插入.刪除資料,初始化.銷燬線性

問題: /* Copyright (c)2015,煙臺大學計算機與控制工程學院 All rights reserved. 檔名稱:專案1--順序表的基本運算(3)插入.刪除資料,初始化.銷燬線性表.cpp