當前位置:首頁 » 服務存儲 » 畫線性表順序存儲示意圖
擴展閱讀
友誼密碼設什麼數字好 2023-02-06 01:28:32

畫線性表順序存儲示意圖

發布時間: 2022-11-27 00:57:06

A. 線性表的順序存儲實驗

你改下下面代碼的標點就行了:
#include<iostream.h>
#define elemtype int
struct link
{ elemtype data;//元素類型
link *next; //指針類型,存放下一個元素地址
};

//頭插法建立帶頭結點的單鏈表
link *hcreat()
{ link s,p;
elemtype i;
cout<<」輸入多個結點數值(用空格分隔),為0時演算法結束」;
cin>>i;
p=new link;
p->next=NULL;
while(i) //當輸入的數據不為0時,循環建單鏈表
{s=new link;
s->data=i;
s->next=p->next;
p->next=s;
cin>>i; }
return p;
}

//輸出單鏈表
void print(1ink *head)
{
1ink *p;
p=head->next;
while(p->next!=NULL)
{
cout<<p->data<<」->」; //輸出表中非最後一個元素
p=p->next;
}
cout<<p->data; //輸出表中最後一個元素
cout<<endl;
}

∥在單鏈表head中查找值為x的結點
Link *Locate(1ink *head,elemtype x)
{
Link *p;
p=head->next;
while((p!=NULL)&&(p->data!=x))
p=p->next;
return p; }

//在head為頭指針的單鏈表中,刪除值為x的結點
void deletel(1ink *head,elemtype x)
{
1ink *p, *q;
q=head;
p=head->next;
while((p!=NULL)&&(p->data!=x))
{
q=p;
p=p->next;}
If(p==NULL) cout<<「要刪除的結點不存在」;
else
q->next=p ->next;
delete(p);
}
}
//在頭指針head所指的單鏈表中,在值為x的結點之後插入值為y的結點
void insert(1ink *head,elemtype x,elemtype y)
{ link *p, *s;
s=new link;
s->data=y;
if(head->next==NULL) //鏈表為空
{
head->next=s;
s->next=NULL:
}
p=Locate(head,x);//調用查找演算法 『
if(p==NULL)
cout<<」插入位置非法」:
else
(s->next=p->next;
p->next=s;
}
}

//將單鏈表p中所有值為x的元素修改成y
void change(1ink *p,elemtype x,elemtype y)
{
link *q;
q=p->next;
while(q!=NULL)
{ if(q->data==x) q->data=y;
q=q->next;
}
}

void count(1ink *h) //統計單鏈表中結點個數
{
1ink *p;int n=0;
p=h->next;
while(p!=NULL)
{n++;p=p->next;}
return n;
}


void main()
{ int n;
elemtype x,y;
link *p, *q;
p=hcreat(); //頭插法建立鏈表
print(p); //輸出剛建立的單鏈表
cout<<」請輸入要刪除的元素」;
cin>>y;
deletel(p,y);
print(p); //輸出刪除後的結果
cout<<」請輸入插入位置的元素值(將待插元素插入到它的後面)」;
cin>>x;
cout<<」請輸入待插元素值」;
cin>>y;
insert(p,x,y);
print(p); //輸出插入後的結果
cout<<」請輸入要修改前、後的元素值」;
cin>>x>>y;
change(p,x,y);
print(p);
cout<<」請輸入要查找的元素值」;
cin>>x;
q=Locate(p,x);
if(q==NULL)cout<<x<<」不在表中,找不到!」<<endl;
else cout<<x<<」在表中,已找到!」<<endl;
n=count(p);
cout<<」鏈表中結點個數為:」<<n<<endl:
}

B. 已知線性表L=(10, 15, 30, 42, 51, 62), 請分別畫出該線性表的順序存儲結構和鏈式存儲結構。

不是很懂你的意思,線性表順序存儲是連續的,把數據寫在連續的空間就是,而鏈式存儲不連續,把數據分多個空間就是

C. 求數據結構試驗 線性表的順序存儲結構

#include<iostream.h>
#include<stdlib.h>
#include <malloc.h>
#define OVERFLOW 0
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100//線性表存儲空間的初始增量
#define LISTINCREMENT 10 // ?
typedef struct{
int * elem;// 存儲空間基址
int length;//當前長度
int listsize;//當前分配的存儲容量
}SqList;
SqList L;
int InitList_Sq(SqList & L){
//構造一個新的線性表。
L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L.elem)exit(OVERFLOW);//存儲容量失敗
L.length=0; //空表長度為0
L.listsize=LIST_INIT_SIZE;//存儲初始容量
return OK;
}//InitList_Sq
int LIstInsert_Sq(SqList & L,int i,int e){
//在順序線性表L中第i位置之前插入新的元素e
if(i<1||i>L.length+1) return ERROR;
if(L.length>=L.listsize){
int * newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
if(!newbase)exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
int * q=&(L.elem[i-1]);
for(int * p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;
*q=e;
++L.length;
return OK;
}
int ListDelete_Sq(SqList&L,int i,int &e)
{
if((i<1)||(i>L.length))return ERROR;
int *p=&(L.elem[i-1]);
e=*p;
int *q=L.elem+L.length-1;
for(++p;p<=q;++p)*(p-1)=*p;
--L.length;
return OK;
}
void main()
{
SqList L;
int i,n;
int e;
cout<<"輸入順序表的個數:"<<endl;
cin>>n;
int *p=(int *)malloc(n*sizeof(int));
InitList_Sq(L);
cout<<"輸入線性表"<<n<<"個元素的值"<<endl;
for(i=0;i<n;i++)
{
cin>>p[i];
L.elem[i]=p[i];
}
cout<<endl;
L.length=i;
cout<<endl;
cout<<"輸入要插入元素的值"<<endl;
cin>>e;
cout<<endl;
cout<<"輸入要插入的位置"<<endl;
cin>>i;
LIstInsert_Sq( L, i, e);
for(i=0;i<n+1;i++)
cout<<L.elem[i];
cout<<endl;
cout<<"輸入要刪除的位置"<<endl;
cin>>i;
ListDelete_Sq(L,i,e)
;for(i=0;i<n;i++)
cout<<L.elem[i];
free(p);

D. 試分別畫出在線性表(a,b,c,d,e,f,g)中進行折半查找,查找關鍵字e,和g的過程。

解題如下:

(1)查e

Step1: a b c d e f g

↑ ↑ ↑

low mid high d<e low=mid + 1;

Step2: a b c d e f g

↑ ↑ ↑

low mid high f>e high=mid – 1;

Step 3: a b c d e f g

low/high

mid e==e return mid ;

(2)查f

Step 1: a b c d e f g

↑ ↑ ↑

low mid high d<f low=mid + 1;

Step 2: a b c d e f g

↑ ↑ ↑

low mid high f==f return mid;

(3)查g

Step 1: a b c d e f g

↑ ↑ ↑

low mid high d<g low=mid + 1;

Step 2: a b c d e f g

↑ ↑ ↑

low mid high f<g low=mid + 1;

Step 3: a b c d e f g

low/high

mid g==g return(mid);

線性表中數據元素之間的關系是一對一的關系,即除了第一個和最後一個數據元素之外,其它數據元素都是首尾相接的(注意,這句話只適用大部分線性表,而不是全部。比如,循環鏈表邏輯層次上也是一種線性表(存儲層次上屬於鏈式存儲),但是把最後一個數據元素的尾指針指向了首位結點)。

線性表是數據結構的一種,一個線性表是n個具有相同特性的數據元素的有限序列。數據元素是一個抽象的符號,其具體含義在不同的情況下一般不同。

在稍復雜的線性表中,一個數據元素可由多個數據項(item)組成,此種情況下常把數據元素稱為記錄(record),含有大量記錄的線性表又稱文件(file)。

線性表中的個數n定義為線性表的長度,n=0時稱為空表。在非空表中每個數據元素都有一個確定的位置,如用ai表示數據元素,則i稱為數據元素ai在線性表中的位序。

線性表的相鄰元素之間存在著序偶關系。如用(a1,…,ai-1,ai,ai+1,…,an)表示一個順序表,則表中ai-1領先於ai,ai領先於ai+1,稱ai-1是ai的直接前驅元素,ai+1是ai的直接後繼元素。當i=1,2,…,n-1時,ai有且僅有一個直接後繼,當i=2,3,…,n時,ai有且僅有一個直接前驅 。

(4)畫線性表順序存儲示意圖擴展閱讀:

線代表存儲結構

線性表主要由順序表示或鏈式表示。在實際應用中,常以棧、隊列、字元串等特殊形式使用。

順序表示指的是用一組地址連續的存儲單元依次存儲線性表的數據元素,稱為線性表的順序存儲結構或順序映像。它以「物理位置相鄰」來表示線性表中數據元素間的邏輯關系,可隨機存取表中任一元素。

鏈式表示指的是用一組任意的存儲單元存儲線性表中的數據元素,稱為線性表的鏈式存儲結構。它的存儲單元可以是連續的,也可以是不連續的。

在表示數據元素之間的邏輯關系時,除了存儲其本身的信息之外,還需存儲一個指示其直接後繼的信息(即直接後繼的存儲位置),這兩部分信息組成數據元素的存儲映像,稱為結點。它包括兩個域;存儲數據元素信息的域稱為數據域;存儲直接後繼存儲位置的域稱為指針域。指針域中存儲的信息稱為指針或鏈

E. 已知線性表L=(10,15,30,42,51,62)請分別畫出該線性表的順序儲存結構和鏈式儲存結構。請幫我畫出來。

這是線性表的順序存儲結構,請採納,好不容易寫的,鏈式就不寫了,可以查資料!

F. 給出三元組線性表的順序存儲表示

這很簡單的問題啊... #define MaxSize 100 typedef char ElemType typedef struct { ElemType data[MaxSize]; //存放順序表元素 int length; //存放順序表的長度 }; //順序表的類型定義

G. 關於線性表的順序存儲結構,高手幫下~~

數位順序表 數位是指各個計數單位所佔的位置,如萬所佔的位置是萬位。每個數位上的數都有相對應的計數單位,如個位的計數單位是個,十位的計數單位是十 整數數位順序表 數級 億級 萬級 個級 數位 千億位 百億位 十億位 億位 千萬位 百萬位 十萬位 萬位 千位 百位 十位 億級 千億位 百億位 十億位 億位
萬級 千萬位 百萬位 十萬位 萬位
個級 千位 百位 十位

每個數位所代表的量 在數位順序表中,從右邊起,第一位是個位,計數單位是一,表示幾個一;第二位是十位,計數單位是十,表示幾個十;第三位是百位,計數單位是百,表示幾個百;第四位是千位,計數單位是千,表示幾個千;第五位是萬位,計數單位是萬,表示幾個萬。以此類推。 數位順序表 京 億兆 萬兆 千兆 百兆 十兆 兆 千億位 百億位 十億位 億位 千萬位 百萬位 十萬位 萬位 千位 百位 十位 個位

H. 畫出下列廣義表的存儲結構示意圖 A=((a,b,c),d(a,b,c)) B=(a,(b,(c,d)e),f)

A=((a,b,c),d(a,b,c)) B=(a,(b,(c,d)e),f)具體存儲結構示意圖如下:

使用鏈表存儲廣義表,首先需要確定鏈表中節點的結構。由於廣義表中可同時存儲原子和子表兩種形式的數據,因此鏈表節點的結構也有兩種。

(8)畫線性表順序存儲示意圖擴展閱讀:

由於廣義表是對線性表和樹的推廣,並且具有共享和遞歸特性的廣義表可以和有向圖建立對應,因此廣義表的大部分運算與這些數據結構上的運算類似。

根據表頭、表尾的定義可知:任何一個非空廣義表的表頭是表中第一個元素,它可以是原子,也可以是子表,而其表尾必定是子表。

I. 數據結構之有序線性表的順序存儲結構

指線性表中的元素按值或者關鍵字的大小先後有序(升序或者降序)。

之前講了線性表的順序存儲結構 數據結構之線性表的順序存儲結構

有序線性表是在之前的基礎上構建的,相對於之前的線性表的操作,有序線性表增加了如下操作:

有序線性表的介面SortedList

有序線性表的實現類,實現了SortedList和繼承了SequenceList( 數據結構之線性表的順序存儲結構 )

插入方法

刪除方法

查找方法

測試類

J. 如何建立一個順序存儲的線性表,實現線性表的插入、刪除操作

順序存儲結構線性表基本操作 C語言實現

#include<stdio.h>
//以下為函數運行結果狀態代碼
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
#defineOVERFLOW-2
#defineLIST_INIT_SIZE100//線性表存儲空間的初始分配量
#defineLISTINCREMENT10//線性表存儲空間分配增量
typedefintStatus;//函數類型,其值為為函數結果狀態代碼
typedefintElemType;//假設數據元素為整型
typedefstruct
{
ElemType*elem;//存儲空間基址
intlength;//當前長度
intlistsize;//當前分配的存儲容量
}SqList;
//實現線性表的順序存儲結構的類型定義
//函數聲明開始
StatusInitList_Sq(SqList&L);
voidDestroyList_Sq(SqList&L);
voidClearList_Sq(SqList&L);
voidListEmpty_Sq(SqListL);
StatusGetElem_Sq(SqListL,i,&e);
intLocateElem_Sq(SqListL,e,compare());
StatusPriorElem_Sq(SqListL,cur_e,&pre_e);
StatusNextElem_Sq(SqListL,cur_e,&next_e);
StatusListInsert_Sq(SqList&L,i,e);
StatusListDelete_Sq(SqList&L,i,&e);
ListTravel_Sq(SqListL,visit());
//函數聲明結束
intmain(void)
{
return0;
}
//函數定義開始
///////////////////////////////////////
//函數名:InitList_Sq()
//參數:SqList*L
//初始條件:無
//功能:構造一個空線性表
//返回值:存儲分配失敗:OVERFLOW
//存儲分配成功:OK
///////////////////////////////////////
StatusInitList_Sq(SqList*L)
{
L.elem=(ElemType*)malloc((LIST_INIT_SIZE*sizeof(ElemType));//分配空間
if(!L.elem)
exit(OVERFLOW);//若存儲分配失敗,返回OVERFLOW
L.length=0;//空表,長度為0
L.listsize=LIST_INIT_SIZE;//初始存儲容量
returnOK;
}
///////////////////////////////////////
//函數名:DestroyList_Sq()
//參數:SqList*L
//初始條件:線性表L已存在
//功能:銷毀線性表
//返回值:無
///////////////////////////////////////
voidDestroyList_Sq(SqList*L)
{
if(L->elem)
free(L->elem);//釋放線性表占據的所有存儲空間
}
///////////////////////////////////////
//函數名:ClearList_Sq()
//參數:SqList*L
//初始條件:線性表L已存在
//功能:清空線性表
//返回值:無
///////////////////////////////////////
voidClearList_Sq(SqList*L)
{
L->length=0;//將線性表的長度置為0
}
///////////////////////////////////////
//函數名:ListEmpty_Sq()
//參數:SqListL
//初始條件:線性表L已存在
//功能:判斷線性表是否為空
//返回值:空:TRUE
//非空:FALSE
///////////////////////////////////////
StatusListEmpty_Sq(SqListL)
{
if(L.length==0)
returnTRUE;
else
returnFALSE;
}
///////////////////////////////////////
//函數名:ListLength_Sq()
//參數:SqListL
//初始條件:線性表L已存在
//功能:返回線性表長度
//返回值:線性表長度(L.length)
///////////////////////////////////////
StatusListLength_Sq(SqListL)
{
return(L.length);
}
///////////////////////////////////////
//函數名:GetElem_Sq()
//參數:SqListL,inti,ElemType*e
//初始條件:線性表L已存在,1<=i<=ListLength(L)
//功能:用e返回線性表中第i個元素的值
//返回值:(i<1)||(i>ListLength(L)):ERROR
//1<=i<=ListLength(L):OK
///////////////////////////////////////
StatusGetElem_Sq(SqListL,inti,ElemType*e)
{
if(i<1||i>L.length)
returnERROR;//判斷i值是否合理,若不合理,返回ERROR
*e=L.elem[i-1];//數組中第i-1的單元存儲著線性表中第i個數據元素的內容
returnOK;
}
///////////////////////////////////////
//函數名:LocateElem_Sq()
//參數:L,e,compare(ElemType1,ElemType2)
//初始條件:線性表L已存在,compare()為數據元素判定函數
//功能:返回順序表L中第1個與e滿足關系compare()的數據元素的位序
//返回值:若在L中存在於e滿足關系compare()的元素:其位序
//若在L中不存在於e滿足關系compare()的元素:0
///////////////////////////////////////
intLocateElem_Sq(SqListL,e,compare(ElemType1,ElemType2))
{
inti=1;//i的初值為第1元素的位序
intp=L.elem;//p的初值為第1元素的存儲位置
while(i<=L.length&&!(*compare)(*p++,e))
++i;//依次進行判定
if(i<=L.length)
returni;//找到滿足判定條件的數據元素為第i個元素
else
return0;//該線性表中不存在滿足判定的數據元素
}
StatusPriorElem_Sq(SqListL,cur_e,&pre_e);
//見StatusNextElem_Sq(SqListL,cur_e,&next_e);
StatusNextElem_Sq(SqListL,cur_e,&next_e);
//我的思路是先用LocateElem_Sq()搜索cur_e的位序,
//再看是否大於等於length,
//若是,則返回OVERFLOW;否則返回後繼
//這樣也許有點麻煩?所以希望大家能夠補充方案
//bywangweinoo1
///////////////////////////////////////
//函數名:ListInsert_Sq()
//參數:SqList*L,inti,ElemTypee
//初始條件:線性表L已存在,1<=i<=ListLength(L)+1
//功能:在線性表中第i個數據元素之前插入數據元素e
//返回值:失敗:ERROR
//成功:OK
///////////////////////////////////////
StatusListInsert_Sq(SqList*L,inti,ElemTypee)
{
ElemType*j;
if(L->length==LIST_MAX_LENGTH)
returnERROR;//檢查是否有剩餘空間
if(i<1||i>L->length+1)
returnERROR;//檢查i值是否合理
//將線性表第i個元素之後的所有元素向後移動
for(j=L->length-1;j>=i-1;i++)
L->elem[j+1]=L->elem[j];
L->elem[i-1]=e;//將新元素的內容放入線性表的第i個位置,
L->length++;
returnOK;
}
///////////////////////////////////////
//函數名:ListDelete_Sq()
//參數:SqList*L,inti,Elemtype*e
//初始條件:線性表L已存在,1<=i<=ListLength(L)
//功能:將線性表L中第i個數據元素刪除
//返回值:失敗:ERROR
//成功:OK
///////////////////////////////////////
intListDelete_Sq(SqList*L,inti,Elemtype*e)
{
if(IsEmpty(L))
returnERROR;//檢測線性表是否為空
if(i<1||i>L->length)
returnERROR;//檢查i值是否合理
*e=L->elem[i-1];//將欲刪除的數據元素內容保留在e所指示的存儲單元中
//將線性表第i+1個元素之後的所有元素向前移動
for(j=i;j<=L->length-1;j++)L->elem[j-1]=L->elem[j];
L->length--;
returnOK;
}
//函數定義結束