【專案1 – 順序表的基本運算】
建立建立順序表運算的演算法庫。
演算法庫包括兩個檔案:
標頭檔案:list.h,包含定義順序表資料結構的**、巨集定義、要實現演算法的函式的宣告;
原始檔:list.cpp,包含實現各種演算法的函式的定義
請採用程式的多檔案組織形式,建立如上的兩個檔案,另外再建立乙個原始檔,編寫main函式,完成相關的測試工作(以下操作在主函式中呼叫實現)。
建立乙個順序表,測試樣例:5,9,6,7,4,8,1,3,2;
在已經建立的線性表的第8個位置插入乙個元素x(10),測試樣例:5,9,6,7,4,8,1,10,3,2。
刪除第4個位置上的元素,並輸出線性表。
從順序表中刪除具有最小值的元素(假設值唯一),並由函式返回被刪除元素的值。若順序表為空則提示錯誤資訊資訊並退出。注意時間複雜度。
編寫演算法函式 reverse( )實現將順序表的倒置。要求演算法的空間複雜度為o(1)
list.h
#ifndef list_h_included
#define list_h_included
#include
#define maxszie 100
typedef
int elemtype;
typedef
struct
sqlist;
void
createlist
(sqlist *
&l, elemtype a,
int n)
;void
initlist
(sqlist *
&l);
void
insert
(sqlist *
&l,int i,
int n)
;void
showlist
(sqlist *l)
;void
deletelist
(sqlist *
&l,int n)
;void
reverse
(sqlist *
&l);
void
deletemin
(sqlist *
&l);
#endif
// list_h_included
list.cpp
#include
#include
#include
#include
"list.h"
void
createlist
(sqlist *
&l, elemtype a,
int n)
l->length = k;
}void
initlist
(sqlist *
&l)void
insert
(sqlist *
&l,int i,
int n)
else
l->data[i]
= n;
l->length++;}
}void
showlist
(sqlist *l)
printf
("\n");
}void
deletelist
(sqlist *
&l,int n)
n--;int i;
for(i=n;i
>length;i++
) l-
>length--;}
void
reverse
(sqlist *
&l)}
void
deletemin
(sqlist *
&l)for
(i=0
;i>length;i++)}
deletelist
(l,minpos)
;printf
("被刪除的數是:%d\n"
,min)
;showlist
(l);
}
main.cpp
#include
#include
#include
"list.h"
#include
"list.cpp"
using
namespace std;
intmain()
//初始化列表
initlist
(l);
printf
("1.+++++++++++++++++++++++++++++\n");
//1.建立乙個順序表,測試樣例:5,9,6,7,4,8,1,3,2
createlist
(l,a,n)
;showlist
(l);
printf
("2.+++++++++++++++++++++++++++++\n");
//2.在已經建立的線性表的第8個位置插入乙個元素x(10),測試樣例:5,9,6,7,4,8,1,10,3,2。
insert
(l,8,10
);showlist
(l);
printf
("3.+++++++++++++++++++++++++++++\n");
//3.刪除第4個位置上的元素,並輸出線性表
deletelist
(l,4);
showlist
(l);
printf
("4.+++++++++++++++++++++++++++++\n");
//從順序表中刪除具有最小值的元素(假設值唯一),並由函式返回被刪除元素的值。若順序表為空則提示錯誤資訊資訊並退出。注意時間複雜度。
deletemin
(l);
printf
("5.+++++++++++++++++++++++++++++\n");
//5.編寫演算法函式 reverse( )實現將順序表的倒置。要求演算法的空間複雜度為o(1)
reverse
(l);
showlist
(l);
}
執行結果如下:
【專案2 – 順序表應用】
在上題完成的演算法庫的基礎上,定義乙個採用順序結構儲存的線性表,設計演算法完成下面的工作:
1、刪除元素下標介於[x, y]之間的所有元素(包含x,y要求x < y ),x,y由使用者隨機指定,如果x, y 不合理或者順序表為空則顯示出錯資訊並退出執行。 盡量考慮以較好的時間複雜度和空間複雜度來實現。
2、將所有偶數移到所有奇數的前面,盡量考慮以較好的時間複雜度和空間複雜度來實現。
【提示】:
(1)充分利用前面建立的演算法庫解決建立順序表、輸出線性表的問題;
(2)為保證複雜度的要求,設計演算法並用專門的函式實現演算法;
(3)每項工作寫乙個程式
基於專案一的**,在其上進行補充:
list.h
bool
deletesome
(sqlist *
&l,int x,
int y)
;void
change
(sqlist *
&l);
list.cpp
//專案二
bool
deletesome
(sqlist *
&l,int x,
int y)
for(j =x-
1;j>length-m;j++
) l-
>length = l-
>length-m;
return
true;}
void
change
(sqlist *
&l)}}}
showlist
(l);
}
mian.cpp
printf
("專案二+++++++++++++++++++++++++++++\n");
printf
("1.+++++++++++++++++++++++++++++\n");
if(deletesome
(l,3,5
))else
printf
("2.+++++++++++++++++++++++++++++\n");
change
(l);
執行結果如下: 順序表實現佇列 資料結構作業
實現通過鍵盤進行插入 實現通過鍵盤進行刪除 良好的人機互動 順序表實現迴圈佇列 如下 迴圈佇列的基本操作 include define maxsize 50 typedef int elemtype 定義迴圈佇列結構體 typedef struct sqqueue 初始化 void initqueu...
資料結構 順序表
順序表的特徵 1由唯一的表名標識 2佔據一塊連續的儲存空間 3資料順序存放,元素之間有先後關係 定義動態的順序表 define maxsize 100 typedef struct sqlist 這個結構體型別存放的是順序表的資訊和順序表的資料 初始化順序表 void initsqlist sqli...
資料結構 順序表
順序表示最簡單的乙個資料結構,直接貼 吧,因為比較簡單。include include typedef struct sqlist sqlist void initlist sqlist l l length 0 void getelem sqlist l 初始化 l length j printf...