㈠ 數據結構 線性表的操作
#include<stdio.h>
#include<string.h>
#include<stdio.h>
#include<stdio.h>
#include<stdio.h>
#include<stdio.h>
#include<stdio.h>
#include<stdio.h>
#include<stdio.h>
#include<stdio.h>
#include<stdio.h>
#include<stdio.h>
Status InitList_Sq(SqList&L)
{
//構造一個空的線性表
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if (!L.elem) exit(OVERFLOW); //分配存儲失敗
L.length = 0; //空表長度為0
L.listsize = LIST_INIT_SIZE;//初始存儲容量
return OK;
}//InitList.Sq
DestroyList(&L)
{
}
ClearList(&L)
{
}
ListEmpty(L)
{
}
ListLength(L)
{
}
GetElem(L,i,&e)
{
}
int LocateElem_Sq(SqList L,ElemType e,
Status(*compare)(ElemType,ElemType)) { //在順序表中查詢第一個滿足判定條件的數據元素,若存在,則返回它的位序,否則返回0
i=1; // i的初值為第1元素的位序
p=L.elem; //p的初值為第1元素的存儲位置
while(i<=L.length && !(*compare)(*p++,e))++i;
if(i<=L.length)return i;
else return 0;
} //LocateElem_SqPriorElem(L,cur_e,&pre_e)
PriorElem(L,cur_e,&pre_e)
{
}
NextElem(L,cur_e,&next_e)
{
}
Status ListInsert_Sq(SqList &L, int i, ElemType e)
{ //在順序表L的第 i 個元素之前插入新的元素e,
// i 的合法范圍為 1≤i≤L.length+1
q = &(L.elem[i-1]); //q 指示插入位置
for (p = &(L.elem[L.length-1]); p >= q; --p)
*(p+1)=*p; //插入位置及之後的元素右移
*q = e; //插入e
++L.length; //表長增1
return OK;
} //ListInsert_Sq
Status ListDelete_Sq(SqList &L, int i, ElemType &e)
{ if((i<1) || (i>L.length)) return ERROR;
//刪除位置不合法
p=&(L.elem[i-1]); // p為被刪除元素的位置
e=*p; //被刪除元素的值賦給 e
q=L.elem+L.length-1; //表尾元素的位置
for(++p;p<=q;++p)*(p-1)=*p;
//被刪除元素之後的元素左移
--L.length; //表長減1
} //ListDelete_Sq
ListTraverse(L,visit())
{
}
void main()
{
int i;
char ch;
while(1)
{
puts("1,構造一個空的線性表");
puts("2,銷毀線性表L");
puts("3,將L重置為空表");
puts("4,判斷表L是否為空表");
puts("5,給出線性表的長度");
puts("6,用e返回第i個元素的值");
puts("7,查找第一個返回給定數據元素的位序,compare()為數據元素比較函數
");
puts("8,確定並給出指定數據元素的前驅");
puts("9,確定並給出指定數據元素的後繼");
puts("10,在第i個位置之前插入一個數據元素
");
puts("11,刪除第i個數據元素");
puts("12,依次訪問L的每個數據元素(遍歷)");
puts("13,退出");
scanf("%d",i);
switch i
case 1:Initlist(&L);break;
case 2:DestroyList(&L);break;
case 3:ClearList(&L);break;
case 4:ListEmpty(L);break;
case 5:ListLength(L);break;
case 6:GetElem(L,i,&e);break;
case 7:LocateElem(L,e,compare());break;
case 8:PriorElem(L,cur_e,&pre_e);break;
case 9:NextElem(L,cur_e,&next_e);break;
case 10:ListInsert(&L,i,e);break;
case 11:ListDelete(&l,i,&e);break;
case 12:ListTraverse(L,visit());break;
case 13:
}
}
這個不是很全 還有些地方需要補充
㈡ JAVA線性結構的操作
現敲的,累死了~
㈢ 什麼是線性結構,什麼是非線性結構
線性結構是一個有序數據元素的集合。常用的線性結構有:線性表,棧,隊列,雙隊列,數組,串。
非線性結構,數學用語,其邏輯特徵是一個結點元素可能有多個直接前趨和多個直接後繼。常見的非線性結構有:二維數組,多維數組,廣義表,樹(二叉樹等)。
傳統文本(例如書籍中的文章和計算機的文本文件)都是線性結構,閱讀是需要注意順序閱讀,而超文本則是一個非線性結構。在製作文本時,可將寫作素材按內部聯系劃分成不同關系的單元,然後用製作工具將其組成一個網型結構。閱讀時,不必按線性方式順序往下讀,而是有選擇的閱讀自己感興趣的部分。
在超文本文件中,可以用一些單詞,短語或圖像作為連接點。這些連接點通常同其他顏色顯示或加下劃線來區分,這些形式的文件就成為超文本文件。通過非線性結構,可能實現頁面任意跳轉。
有一個以上根結點的數據結構一定是非線性結構。
線性結構特徵:
1、集合中必存在唯一的一個「第一個元素」;
2、集合中必存在唯一的一個」最後的元素「;
3、除最後元素之外,其它數據元素均有唯一的」後繼「;
4、除第一元素之外,其它數據元素均有唯一的」前驅「。
數據結構中線性結構指的是數據元素之間存在著「一對一」的線性關系的數據結構。
如(a0,a1,a2,.....,an),a0為第一個元素,an為最後一個元素,此集合即為一個線性結構的集合。
相對應於線性結構,非線性結構的邏輯特徵是一個結點元素可能對應多個直接前驅和多個後繼。
㈣ 數據結構線性表基本操作
#include <iostream>
#include <cstdio>
#include <cstdlib>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
using namespace std;
typedef int Elemtype;
typedef struct
{
Elemtype *elem;
int length;
int listsize;
} SqList;
int InitList_Sq(SqList &L)//L在下面發生變化,故用引用
//構造一個新的線性表
{
L.elem=(Elemtype *)malloc(LIST_INIT_SIZE*sizeof(Elemtype));
if(!L.elem)
exit(OVERFLOW);
L.length=0;//空表長度為0
L.listsize=LIST_INIT_SIZE;//初始存儲容量
return OK;
}
int ListInsert_Sq(SqList &L,int i,Elemtype e)
//在順序表L中的第i個位置插入新的元素e
//i的合法值為1<=i<=ListLength_Sq(L)+1
{
Elemtype * newbase;
Elemtype* p;
Elemtype* q;
if(i<1||i>L.length+1)//判斷i值是否合法
return ERROR;
if(L.length>=L.listsize)//增加分配空間
{
newbase=(Elemtype*)realloc(L.elem,
(L.listsize+LISTINCREMENT)*sizeof(Elemtype));
if(!newbase)//存儲分配失敗
exit(OVERFLOW);
L.elem=newbase;//新基址
L.listsize+=LISTINCREMENT;//增加存儲容量
}
/*for(int j=L.length;j>=i;j--)//元素右移
L.elem[j+1]=L.elem[j];
L.elem[i]=e;//插入e
L.length++;//表長增加
return OK;*/
q=&(L.elem[i-1]);//指針操作
for(p=&(L.elem[L.length-1]); p>=q; --p)
{
*(p+1)=*p;
}
*q=e;
++L.length;
return OK;
}
int main()
{
int i,n,x,k;
SqList La;
cout<<"請輸入線性表La的長度:";
cin>>n;
cout<<"請輸入線性表La中的元素:";
InitList_Sq(La);
for(i=0; i<n; i++)
{
cin>>La.elem[i];
La.length++; //如果不加這句,你要讓La.length=n;
}
cout<<"請輸入要插入到線性表La中的數字x和插入的位置k:";
cin>>x>>k;
ListInsert_Sq(La,k,x);
cout<<"線性表La=";
for(i=0; i<La.length; i++)//你的是i<n你插入元素的時候n沒有變,不,
cout<<La.elem[i]<<" ";
return 0;
}
你自己看看
㈤ 線性的數據結構有哪幾種各有什麼特點
線性的數據結構有:線性表、棧、隊列、雙端隊列、數組和串
1、線性表
線性表是最基本、最簡單、也是最常用的一種數據結構。一個線性表是n個具有相同特性的數據元素的有限序列。
特點:線性表中數據元素之間的關系是一對一的關系;線性表的邏輯結構簡單,便於實現和操作。
2、棧
棧又名堆棧,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。棧是限定僅在表頭進行插入和刪除操作的線性表。
特點:棧是允許在同一端進行插入和刪除操作的特殊線性表,棧可以用來在函數調用的時候存儲斷點,做遞歸時要用到棧。
3、隊列
隊列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。
特點:在隊列的形成過程中,可以利用線性鏈表的原理,來生成一個隊列;隊列和棧一樣只允許在斷點處插入和刪除元素。
4、雙端隊列
雙端隊列是指允許兩端都可以進行入隊和出隊操作的隊列,其元素的邏輯結構仍是線性結構。將隊列的兩端分別稱為前端和後端,兩端都可以入隊和出隊。
特點:對於雙端隊列,在序列的兩端插入元素的時間復雜度均為常數,在中間插入元素的時間復雜度與插入點到最近序列端點的距離成正比。
5、數組
數組是用於儲存多個相同類型數據的集合。若將有限個類型相同的變數的集合命名,那麼這個名稱為數組名。組成數組的各個變數稱為數組的分量,也稱為數組的元素,有時也稱為下標變數。
特點:數組中的各元素的存儲是有先後順序的,它們在內存中按照這個先後順序連續存放在一起;數組元素用整個數組的名字和它自己在數組中的順序位置來表示。
6、串
串是零個或多個字元組成的有限序列。一般記S=『a1a2....an 』其中,S是串名,單引號括起的字元序列是串值;ai(1〈=i〈=n)可以是字母,數字或其它字元。
特點:串中所包含的字元個數為該串的長度;長度為零的串稱為空串,它不包含任何字元。
㈥ 線性結構的12種操作定義是固定的嗎
線性結構
線性結構是一個有序數據元素的集合。
常用的線性結構有:線性表,棧,隊列,雙隊列,數組,串。
非線性結構,
數學用語,其邏輯特徵是一個結點元素可能有多個直接前趨和多個直接後繼。
㈦ 1.什麼是線性結構,樹型結構,圖型結構。2.什麼是棧,隊列。3.排序的方法有幾種
1.什麼是線性結構,樹型結構,圖型結構。2.什麼是棧,隊列。3.排序的方法有幾種
㈧ 面試題:數據結構中常見的線性結構有哪些,他們之間有什麼區別
常用的線性結構有:線性表,棧,隊列,數組,串。線性表是多個相同元素組成的有限線性序列。棧是一種特殊線性表,它將插入和刪除限制在表的一端進行,是一種後進先出表。隊列也是一種操作受限的特殊線性表,它只允許在表的前端進行刪除操作,而在表的後端進行插入操作。順序存儲結構在計算機內用一組連續的內存單元來存儲數組。一堆數組本身就是順序表結構,多維數組是一種特殊的線性結構。串是一種數據元素固定為字元的線性表。串上的操作是針對串的整體或串的某一部分子串進行的,而線性表是針對線性表上的某個數據元素進行的。
㈨ 線性結構有哪幾種存儲結構
數據元素之間的關系有兩種不同的表示方法:順序映象和非順序映象,並由此得到兩種不同的存儲結構:順序存儲結構和鏈式存儲結構。 順序存儲方法:它是把邏輯上相鄰的結點存儲在物理位置相鄰的存儲單元里,結點間的邏輯關系由存儲單元的鄰接關系來體現,由此得到的存儲表示稱為順序存儲結構。順序存儲結構是一種最基本的存儲表示方法,通常藉助於程序設計語言中的數組來實現。 鏈接存儲方法:它不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關系是由附加的指針欄位表示的。由此得到的存儲表示稱為鏈式存儲結構,鏈式存儲結構通常藉助於程序設計語言中的指針類型來實現。 順序存儲和鏈接存儲是數據的兩種最基本的存儲結構。 在順序存儲中,每個存侗含有所存元素本身的信息,元素之間的邏輯關系是通過數組下標位置簡單計算出來彭線性表的順序存儲中,若一個元素存儲在對應數組中的下標位置為i,則它的前驅元著數組中的下標位置為i一1,它的後繼元素在對應數組中的下標位置為i+1。在鏈接存個存儲結點不僅含有所存元素本身的信息,而且含有元素之間邏輯關系的信息。 其中data表示值域,用來存儲.一個元素。Pl,p2,…,Pill(1n≥1)均為指針域,每個韋值為其對應的後繼元素或前驅元素所在結點(以後簡稱為後繼結點或前驅結點)的存通過結點的指針域(又稱為鏈域)可以訪問到對應的後繼結點或前驅結點,該後繼結一《結點稱為指針域(鏈域)所指向(鏈接)的結點。若一一個結點中的某個指針域不需要指f點,則令它的值為空,用常量N-LILL表示,NIJ】上在iostream.h中被定義為數值0。 數據的鏈接存儲表示又被稱為鏈接表。當鏈接表中的每個結點只含有一個指針稱為單鏈表。