當前位置:首頁 » 操作系統 » 順序表逆置演算法

順序表逆置演算法

發布時間: 2022-05-31 22:09:31

㈠ 用順序表將表逆置

把void Reverse(T data[],int length);的聲明改為void Reverse();
這個函數下面的定義改為
template<class T>
void SeqList<T>::Reverse()
{
int temp;
for(int i=0;i<=length/2;i++)
{
temp=data[i];
data[i]=data[length-i-1];
data[length-i-1]=temp;
}
}
程序最後的調用改為
a.Reverse();
a.PrintList();

㈡ 數據結構:設計一個高效演算法,將順序表中的所有元素逆置,要求演算法空間復雜度為O(1)。

設計一個高效演算法,將順序表中的所有元素逆置,要求演算法空間復雜度為O(1)掃描順序表L的前半部分元素L.data[i] (0<=i<L.length/2),將其與後半部分的對應元素L.data[L.length-1-i]進行交換即可。

順序表的存儲只要確定了起始位置,表中任一元素的地址都通過下列公式得到:LOC(ai)=LOC(a1)+(i-1)*L 1≤i≤n 其中,L是元素佔用存儲單元的長度。

(2)順序表逆置演算法擴展閱讀:

數據的物理結構是數據結構在計算機中的表示,它包括數據元素的機內表示和關系的機內表示。由於具體實現的方法有順序、鏈接、索引、散列等多種。

數據元素的機內用二進制位(bit)的位串表示數據元素。當數據元素有若干個數據項組成時,位串中與各個數據項對應的子位串稱為數據域(data field)。

㈢ 寫一個演算法,實現順序表的就地逆置,即在原表的存儲空間將線性表(a1,a2,...an-1,an)逆置為(an,an-1,...

運行過了,沒有任何問題,有什麼不明白的可以交流下!!

#include <stdio.h>
int main()
{
typedef struct Lnod
{
int data;
struct Lnod *next;
}Lnod,*Linklist;

Linklist p,m,n,r,L,a,b;
int i;
L=(Linklist)malloc(sizeof(Lnod)*5);
if(!L)exit(0);
L->next=NULL;
for(i=0;i<5;i++)
{
p=(Linklist)malloc(sizeof(Lnod));
if(!p)exit(0);
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}
a=L->next;
printf("原來的鏈表中的元素為:\n");
while(a)
{
printf("%d, ",a->data);
a=a->next;
}
printf("\n");

m=L->next;
n=m->next;
while(n->next)
{
r=n->next;
n->next=m;
m=n;
n=r;
}

n->next=m;
L->next->next=NULL;
L->next=n;

b=L->next;

printf("\n\n逆置之後鏈表中的元素為:\n");
while(b)
{
printf("%d, ",b->data);
b=b->next;
}
printf("\n");

return 0;
}

c編程高手團隊正在招新,有意者速速行動,一起學習,一起努力!!!

㈣ 【數據結構】線性表(包括有序表)在順序表和鏈表上的插入、刪除、逆置操作演算法

1)初始化指針p和q,分別指向鏈表中相鄰的兩個元素;

2)當p->next不為空時,做如下處理:
①若相鄰兩元素不相等時,p和q都向後推一步;
②否則,當相鄰元素相等時,刪除多餘元素。
【演算法源代碼】
void Delete_Equal(LinkList *L)
{ p=(*L)->next;q=p->next; /*p和q指向相鄰的兩個元素*/
while(p->next)
{ if(p->data!=q->data) /*若相鄰兩元素不相等時,p和q都向後推一步*/
{ p=p->next; q=p->next; }
else
{ while(q->data==p->data) /*當相鄰元素相等時刪除多餘元素*/
{ r=q;
q=q->next;
free(r);
}
p->next=q;p=q;q=p->next;
}/*else*/
}/*while*/
}/*Delete_Equal */
試設計一個演算法,對帶頭結點的單鏈表實現就地逆置。

【演算法分析】
1)空表或長度為1的表,不做任何處理;
2)表長大於2時,做如下處理:
①首先將整個鏈表一分為二,即從鏈表的第一元素結點處斷開;
②逐個地把剩餘鏈表的當前元素q插入到鏈表的頭部。
【演算法源代碼】
void LinkList_reverse(LinkList L)
{ if(!L->next||!L->next->next) return;
p=L->next; q=p->next; s=q->next; p->next=NULL; /*從鏈表的第一元素結點處斷開*/
while(s->next)
{q->next=p;p=q;
q=s;s=s->next; /*把L的元素逐個插入新表表頭*/
}
q->next=p;s->next=q;L->next=s;
}/*LinkList_reverse*/

㈤ 順序表逆置的演算法思想和演算法實現是什麼

試寫一演算法,實現順序表的就地逆置。

即利用原表的存儲空間將線性表(a1,a2,…,an)
逆置為(an,an-1,…,a1)。
實現下列函數:
void Inverse(SqList &L);
順序表類型定義如下:
typedef struct {
ElemType *elem;
int length;
int listsize;
} SqList;
void Inverse(SqList &L)

㈥ 編寫一個演算法實現順序表的就地逆置(即使用原順序表的存儲空間)'

int nilist(SList *p,int i)
{int temp;<br/>int j;<br/>j=p->n;<br/>j=j/2;<br/>for(i=p->n-1;i>=j;i--)<br/>{temp=p->data[i];p->data[i]=p->data[p->n-1-i];p->data[p->n-1-i]=temp;}
return(1);
}隨便寫的,有錯誤自己問老師.

㈦ 關於數據結構 問題:設計一個演算法,將順序表中的所有元素逆置。我自己寫的演算法和答案不一樣,幫我看看

你的演算法雖然效率低點,但還是可以完成任務的。
你希望取出最後一個元素,然後把其他元素向後移,把最後的那個元素放到前面空出來的位置上。
程序中的錯誤在於,向後移動時,應該從後向前循環。你這樣從前向後循環,整個順序表都被賦成第一個元素的數值了。

㈧ 編寫演算法,實現順序表逆置的操作

node *reserve(node*head)
{
node*p1,*p2,*p3;
if((head==NULL)||(head->next==NULL))
return head;

p1=head;
p2=p1->next;
while(p2!=NULL)
{
p3=p2->next;
p2->next=p1;
p1=p2;
p2=p3;
}
head->next=NULL;
p1=head;
return head;
}

㈨ 試用一個演算法,實現順序表的就地逆置,

int a[n]; //....
for(int i=0;i<n/2;i++)
{
int t=a[i];
a[i]=a[10-i-1];
a[10-i-1]=t;
}

熱點內容
sqlserver連接驅動 發布:2024-05-06 00:33:34 瀏覽:645
存儲開銷 發布:2024-05-06 00:13:38 瀏覽:953
伺服器怎麼盈利 發布:2024-05-05 23:56:16 瀏覽:941
java網站培訓學校 發布:2024-05-05 23:43:11 瀏覽:40
淘寶搜索演算法 發布:2024-05-05 23:37:07 瀏覽:998
sqlwhencasethen 發布:2024-05-05 23:27:51 瀏覽:641
模架編程軟體 發布:2024-05-05 23:26:54 瀏覽:483
存儲過程異常 發布:2024-05-05 23:24:03 瀏覽:399
winxp訪問不了win7 發布:2024-05-05 23:05:23 瀏覽:734
演算法牛 發布:2024-05-05 22:43:40 瀏覽:720