数据结构例程——线性表顺序存储的应用
生活随笔
收集整理的這篇文章主要介紹了
数据结构例程——线性表顺序存储的应用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文是數據結構基礎系列網絡課程(2):線性表中第6課時線性表順序存儲的應用中所講的例程。
例:刪除元素
問題:已知長度為n的線性表A采用順序存儲結構,設計算法,刪除線性表中所有值為x的數據元素。
要求:時間復雜度為O(n)、空間復雜度為O(1)的算法
解法0:用基本運算實現,不滿足復雜度要求
(注:本文中所需要的list.h和list.cpp見點擊參照…)
解法1:復制要保留的元素
#include "list.h" #include <stdio.h>void delnode2(SqList *&L,ElemType x) {int k=0,i; //k記錄非x的元素個數for (i=0; i<L->length; i++)if (L->data[i]!=x){L->data[k]=L->data[i];k++;}L->length=k; }//用main寫測試代碼 int main() {SqList *sq;ElemType a[10]= {5,8,7,0,2,4,9,6,7,3};CreateList(sq, a, 10);printf("刪除前 ");DispList(sq);delnode2(sq, 7);printf("刪除后 ");DispList(sq);return 0; }例:分離元素
問題 :設順序表有10個元素,其元素類型為整型。 設計一個算法,以第一個元素為分界線,將所有小于它的元素移到該元素的前面,將所有大于它的元素移到該元素的后面
解法1:
#include "list.h" #include <stdio.h>void move1(SqList *&L) {int i=0,j=L->length-1;ElemType pivot=L->data[0]; //以data[0]為基準ElemType tmp;while (i<j) //從區間兩端交替向中間掃描,直至i=j為止{while (i<j && L->data[j]>pivot)j--; //從右向左掃描,找第1個小于等于pivot的元素while (i<j && L->data[i]<=pivot)i++; //從左向右掃描,找第1個大于pivot的元素if (i<j){tmp=L->data[i]; //L->data[i]和L->data[j]進行交換L->data[i]=L->data[j];L->data[j]=tmp;}}tmp=L->data[0]; //L->data[0]和L->data[j]進行交換L->data[0]=L->data[j];L->data[j]=tmp; }//用main寫測試代碼 int main() {SqList *sq;ElemType a[10]= {5,8,7,0,2,4,9,6,7,3};CreateList(sq, a, 10);printf("移動前 ");DispList(sq);move1(sq);printf("移動后 ");DispList(sq);return 0; }解法2:
#include "list.h" #include <stdio.h>void move2(SqList *&L) {int i=0,j=L->length-1;ElemType pivot=L->data[0]; //以data[0]為基準while (i<j) //從順序表兩端交替向中間掃描,直至i=j為止{while (j>i && L->data[j]>pivot)j--; //從右向左掃描,找一個小于等于pivot的data[j]L->data[i]=L->data[j]; //找到這樣的data[j],放入data[i]處i++;while (i<j && L->data[i]<=pivot)i++; //從左向右掃描,找一個大于pivot的記錄data[i]L->data[j]=L->data[i]; //找到這樣的data[i],放入data[j]處j--;}L->data[i]=pivot; }//用main寫測試代碼 int main() {SqList *sq;ElemType a[10]= {5,8,7,0,2,4,9,6,7,3};CreateList(sq, a, 10);printf("移動前 ");DispList(sq);move2(sq);printf("移動后 ");DispList(sq);return 0; }總結
以上是生活随笔為你收集整理的数据结构例程——线性表顺序存储的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spark调优1
- 下一篇: linux开机自动启动