㈠ 求數據結構試驗 線性表的順序存儲結構
#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);
㈡ 數據結構實驗 線性表中順序存儲結構的基本操作演算法(建順序表,查詢,插入,刪除,遍歷)
有序線性表插入一個數依然有序
#include<stdio.h>
#define MAXSIZE 6
typedef char datatype;
typedef struct SeqList
{
datatypedata[MAXSIZE];
int last;
}SeqList;
SeqList *init_SeqList()
{
SeqList *L;
L=(SeqList*)malloc(sizeof(SeqList));
L->last=-1;
return L;
}
int main()
{ SeqList *L;
int k,x,j;
intInser_SeqList(SeqList *L);
L->last=0;
L=init_SeqList();
for(k=0;k<(MAXSIZE-1);k++)
{ scanf("%d",&x);
L->data[k]=x;
L->last++;
}
Inser_SeqList(L);
for(j=0;j<L->last;j++)
printf("%d",L->data[j]);
return 0;
}
int Inser_SeqList(SeqList *L)
{
int j,x;
if(L->last==MAXSIZE-1)
{printf("表滿");
return (-1);
}
L->last++;
for(j=L->last;j>=0;j--)
if(L->data[j]<x)
L->data[L->last]=x;
else
L->data[j+1]=L->data[j];
return 1;
}
你好,上面是我的程序:符合你的1 2 4點 查詢、刪除操作在課本里找到 寫入即可 謝謝
㈢ 線性表順序存儲結構及其有關演算法的實現
將順序表初始化為5個元素,在結構中定義了順序表的長度,int length:所以在主函數中可以直接調用用printf(
㈣ 線性表兩種 存儲結構各自的優缺點有哪些
線性表的鏈式存儲結構:
優點:
插入和刪除不需要移動插入時只需要對插入位置後的一個元素進行操作,不需要大量的移動元素。空間有效利用高。
缺點:
大量訪問操作時不如順序存儲結構,因為每次都需要從頭開始遍歷整個線性表直到找到相應的元素為止。
線性表的順序存儲結構:
優點:
可隨機存取表中任一元素。因為有下標可以操作可以快速的定位到指定位置的元素,但是不知道位置的話也需要順序遍歷。
缺點:
插入或刪除操作時,需大量移動元素。合適在很少進行插入和刪除運算的情況下。
(4)線性表順序存儲結構調試分析擴展閱讀:
線性表的特徵
集合中必存在唯一的一個「第一元素」。
集合中必存在唯一的一個 「最後元素」 。
除最後一個元素之外,均有唯一的後繼(後件)。
除第一個元素之外,均有唯一的前驅(前件)。
線性表的基本操作
MakeEmpty(L) 這是一個將L變為空表的方法。
Length(L) 返回表L的長度,即表中元素個數。
Get(L,i) 這是一個函數,函數值為L中位置i處的元素(1≤i≤n)。
Prior(L,i) 取i的前驅元素。
Next(L,i) 取i的後繼元素。
Locate(L,x) 這是一個函數,函數值為元素x在L中的位置。
Insert(L,i,x)在表L的位置i處插入元素x,將原占據位置i的元素及後面的元素都向後推一個位置。
Delete(L,p) 從表L中刪除位置p處的元素。
IsEmpty(L) 如果表L為空表(長度為0)則返回true,否則返回false。
Clear(L)清除所有元素。
Init(L)同第一個,初始化線性表為空。
Traverse(L)遍歷輸出所有元素。
Find(L,x)查找並返回元素。
Update(L,x)修改元素。
Sort(L)對所有元素重新按給定的條件排序。
strstr(string1,string2)用於字元數組的求string1中出現string2的首地址。
參考資料來源:網路-線性表
㈤ 一、實驗目的 1.掌握用 C語言調試程序的基本方法。 2.掌握線性表的基本運算,如插入、刪除等。 二、實驗
#include
<stdio.h>
#include
<stdlib.h>
#define
MAXSIZE 20
typedef
int ElemType;
typedef
struct
{
ElemType a[MAXSIZE];
int
length;
}SqList;
SqList
a,b,c;
void
creat_list(SqList *L);
void
out_list(SqList L);
void
insert_sq(SqList *L,int i,ElemType e);
int
locat_sq(SqList L,ElemType e);
void
DeleteList(SqList *L,int i)
;
main()
{
int i,k,loc; ElemType e,x;
do
{ printf("\n\n\n");
printf("\n
1. creat " );
printf("\n
2. insert");
printf("\n
3. delete");
printf("\n
4. find");
printf("\n
5. end");
printf("\n***************");
printf("\n
input:1-5");
scanf("%d",&k);
switch(k)
{
case 1:{ creat_list(&a); out_list(a);} break;
case
2:{ printf("\n i,e=?"); scanf("%d,%d",&i,&e);
insert_sq(&a,i,e);
out_list(a);
}
break;
case
3:{ printf("\n i=?"); scanf("%d",&i);
DeleteList(&a,i);
out_list(a);
}
break;
case
4:{ printf("\n e=?"); scanf("%d",&e);
loc=locat_sq(a,e);
if
(loc==-1) printf("\n not find
%d",loc);
else
printf("\n find wei shi
%d",loc);
}
break;
}
/* switch */
}while(k!=5);
printf("\n
byebye");
printf("\n
enter,return");
}
void
creat_list(SqList *L)
{
int i;
printf("\n
n=?"); scanf("%d",&L->length);
for(i=0;i<L->length;i++){
printf("\t data %d=?",i);
scanf("%d",&(L->a[i]));
}
}
/* creat_list */
void
out_list(SqList L)
{
int i; char ch;
printf("\n");
for(i=0;i<=L.length-1;i++)
printf("%10d",L.a[i]);
printf("\n\n
");
}
/* out_list */
void
insert_sq(SqList *L,int i,ElemType e)
{
int j;
if
(L->length==MAXSIZE) printf("\n overflow !");
else
if(i<1||i>L->length+1) printf("\n erroe i !");
else
{ for(j=L->length-1; j>i-1; j--) L->a[j+1]=L->a[j];
L->a[j+1]=e;
L->length++;}
}
/* insert_sq */
int
locat_sq(SqList L, ElemType e)
{
int i=0;
while(i<=L.length-1
&& L.a[i]!=e) i++;
if(i<=L.length-1)
return(i+1);
else
return(-1);
}/*
locat_sq */
void
DeleteList(SqList *L,int i)
{
}
㈥ C語言 數據結構高手進來看一下關於「線性表的順序存儲」問題
l = malloc(sizeof(seqlist));
memset(l,0,sizeof(seqlist));
把這句加在main裡面的變數申明後,其他函數調用前
還有你insett函數裡面有時候用L有時候用l要一致,還有引號要是英文格式的
㈦ 跪求C數據結構高手幫忙~~線性表的順序存儲及其操作
#include
#include
#define
LIST_INIT_SIZE
100
#define
LISTINCREMENT
10
typedef
struct{
int
*
elem;
int
length;
int
listsize;
}SqList;
//SqList
sq;
void
InitList_Sq(SqList
*sq)
//
初始化列表
{
sq->elem=(int
*)malloc(LIST_INIT_SIZE*sizeof(int));
sq->length=0;
sq->listsize=LIST_INIT_SIZE;
printf("---申請空間成功---!\n");
}
void
GetElem(SqList
*sq,int
i)//獲取第i位置元素的值
{
int
*p;
p=&(sq->elem[i-1]);
printf("%d",*p);
printf("\n");
}
int
ListInsert_Sq(SqList
*sq,int
i,int
a)//在i位置之前插入a
{
int
*p,*q;
if(i<=0||i>sq->length+1)
{
printf("---位置不合法---!\n");
return
0;
}
if(sq->length>=sq->listsize)
{
int*
newbase=(int
*)realloc(sq->elem,(sq->listsize+LISTINCREMENT)*sizeof(int));
if(!newbase)
{
printf("申請空間溢出\n");
return
0;
}
sq->elem=newbase;
sq->listsize+=LISTINCREMENT;
}
p=&(sq->elem[i-1]);//p指向第i位置的元素
q=&(sq->elem[sq->length-1]);//q指向最後一個元素
for(;q>=p;--q)
*(q+1)=*q;
*p=a;
++sq->length;
return
1;
}
int
ListDelete_Sq(SqList
*sq,int
i)
//刪除i位置上的值
{
int
*p,*q;
if(i<1||i>sq->length)
return
0;
p=&(sq->elem[i-1]);//p指向第i位置的元素
q=sq->elem+sq->length-1;//q指向最後一個元素
for(++p;p<=q;++p)
{
*(p-1)=*p;
}
--sq->length;
return
1;
}
void
visit(SqList
*sq)//輸出數據
{
int
i=1;
for(;i<=sq->length;i++)
{
int
*p;
p=&sq->elem[i-1];
printf("%d",*p);
printf("
");
}
}
void
main()
{
int
i=1,a=0,boo=1,number=0;
SqList
s,*sq;
sq=&s;
InitList_Sq(sq);
printf("初始化空表\n");
printf("
輸入數據
個數\n");
scanf("%d",&number);
printf("輸入%d個數據",number);
printf("\n");
for(;i<=number;i++)
{
scanf("%d",&a);
if(boo=ListInsert_Sq(sq,i,a))
{
printf("---插入成功!---\n");
}
else
{
printf("---插入不成功,重新插入---!\n");
i=i-1;
}
}
printf("輸出所有元素\n");
visit(sq);
printf("\n");
printf("輸出刪除的位置:");
scanf("%d",&a);
if(boo=ListDelete_Sq(sq,a))
{
printf("---數據刪除成功!---\n");
}else
{
printf("---沒有刪除成功---\n");
}
printf("輸出所有元素\n");
visit(sq);
printf("\n");
printf("輸出要顯示數據的位置:");
scanf("%d",&a);
printf("輸出%d位置數值\n",a);
if(a<0||a>sq->length)
{
printf("---輸出位置的數據不存在---\n");
}
else
{
GetElem(sq,a);
}
}
㈧ 實驗一 線性表應用 (原創) 一. 實驗目的 1、 掌握用C++上機調試線性表的基本方法; 2、 掌握線性表的基本
從哲學的角度講,每個人都像磁帶一樣有兩面性。比如你,一面是B面,另一面也是B面。
㈨ 用順序存儲結構編寫一演算法,將線性表就地逆置,並分析演算法的時間效率和空間效率
設線性表中有n個元素,從第1個元素開始向後遍歷,直到第n/2個元素為止,當遍歷到第i個元素時,將它與第n-i+1個元素互換位置,比如第1個元素就和第n-1+1=n個元素互換位置。演算法分析:只需遍歷n/2個元素,因此時間復雜度o(n),屬於線性時間復雜度。空間佔用方面,只在交換時用到一個臨時存貯空間,因此為o(1),屬於常量空間復雜度
㈩ 線性表的兩種存儲結構各有哪些優缺點
線性表具有兩種存儲結構即順序存儲結構和鏈接存儲結構。
線性表的順序存儲結構可以直接存取數據元素,方便靈活、效率高,但插入、刪除操作時將會引起元素的大量移動,因而降低效率
而在鏈接存儲結構中內存採用動態分配,利用率高,但需增設指示結點之間關系的指針域,存取數據元素不如順序存儲方便,但結點的插入、刪除操作較簡單。