當前位置:首頁 » 編程語言 » 數據結構c語言版線性表

數據結構c語言版線性表

發布時間: 2022-12-28 04:05:36

1. 數據結構c語言版 使用線性表的順序儲存結構定義(靜態)實現線性表的初

直接上源碼吧。
/*線性表功能的實現*/
#include<stdio.h>
//定義常量 存儲空間的初始化分配
#define MAXSIZE 20
#define TRUE 1
#define ERROR -1
#define FALSE 0
#define OK 1
//用typedef定義類型
typedef int Status;
typedef int ElemType;
//定義一個結構體類型
typedef struct{
ElemType data[MAXSIZE];
int length;
} sqlist;
//初始化函數
Status initList(SqList *L){
L->length = 0;
return OK;
}
//返回線性表的長度
Status getListLength(SqList L){
return L.length;
}
//線性表為空返回true,否則返回false
Status listEmpty(SqList L){
if(L.length == 0){
return TRUE;
}
return FALSE;
}
//線性表清空,長度為0
Status clearList(SqList *L){
L->length = 0;
return OK;
}
//獲取指定的元素的值,返回下標為i - 1的元素,賦值給e
Status getElem(SqList L, int i, ElemType *e){
//判斷元素位置是否合法[i]
if(i > L.length || i < 1){
printf("查找的位置不正確 \n");
return ERROR;
}
//判斷線性表是否為空
if(listEmpty(L)){
return ERROR;
}
*e = L.data[i - 1];
return OK;
}
//在線性表中查找指定的e相等的元素,如果查找成功,返回該元素的下標,否則返回ERROR
Status locateElem(SqList L, ElemType e){
int i;
for(i = 0; i < L.length - 1; i++){
if(L.data[i] == e){
return i;
}
}
printf("沒有查找到元素 %d 指定的下標\n",e);
return ERROR;
}
//自動創建 MAXSIZE 個元素,並賦值為0
Status createList(SqList *L){
int i;
for(i = 0; i < 10; i++){
L->data[i] = 0;
}
L->length = 10;
return OK;
}
//在線性表中第i個位置前插入新元素e
Status listInsert(SqList *L, int i, ElemType e){
//判斷長度是否可以允許插入新的數據
if(L->length >= MAXSIZE){
printf("空間已滿,不能再插入數據\n");
return FALSE;
}
//判斷插入位置的合法性
if(i < 1 || i > L->length) {
printf("插入位置不正確\n");
return FALSE;
}
int j;
for(j = L->length - 1; j >= i; j--){
L->data[j] = L->data[j - 1];
}
L->data[i - 1] = e;
L->length++;
return TRUE;
}
//刪除線性表中第i個元素,成功後表長減1,用e返回其值
Status deleteList(SqList *L, int i, ElemType *e){
//判斷線性表是否為空
if(listEmpty(*L)){
return ERROR;
}
//判斷刪除的位置是否合法
if(i < 1 || i > L->length) {
printf("刪除位置不合法\n");
return ERROR;
}
*e = L->data[i - 1];
for(i; i < L->length; i++){
L->data[i - 1] = L->data[i];
}
L->length--;
return TRUE;
}
//遍歷線性表
Status listTraverse(SqList L){
int i;
for(i = 0; i < L.length; i++){
printf("%d ",L.data[i]);
}
printf("\n");
return OK;
}
//主程序
int main(void){
SqList L;
ElemType e;
initList(&L);
int option = 1;
int input_number;
int res;
ElemType input_value;
printf("\n1.遍歷線性表 \n2.創建線性表 \n3.清空線性表 \n4.線性表插入 \n5.查找表中元素 \n6.判斷元素是否在表中 \n7.刪除某個元素 \n8.線性表長度\n9.線性表是否為空\n0.退出 \n請選擇你的操作:\n");
while(option){
scanf("%d",&option);
switch(option){
case 0:
return OK;
break;
case 1:
listTraverse(L);
break;
case 2:
createList(&L);
listTraverse(L);
break;
case 3:
clearList(&L);
listTraverse(L);
break;
case 4:
printf("請輸入插入的位置:");
scanf("%d",&input_number);
printf("\n");
printf("請輸入插入的值:");
scanf("%d",&input_value);
printf("\n");
listInsert(&L, input_number, input_value);
listTraverse(L);
break;
case 5:
printf("請輸入要查找的位置:");
scanf("%d",&input_number);
printf("\n");
getElem(L, input_number, &input_value);
printf("第%d個元素的值為:%d\n",input_number,input_value);
break;
case 6:
printf("請輸入要查找的元素:");
scanf("%d",&input_value);
printf("\n");
res = locateElem(L, input_value);
if(res != ERROR){
printf("值為%d在表中的第%d個位置\n",input_value,input_number);
}
break;
case 7:
printf("要刪除第幾個元素?");
scanf("%d",&input_number);
printf("\n");
deleteList(&L, input_number, &input_value);
listTraverse(L);
break;
case 8:
res = getListLength(L);
printf("線性表的長度是:%d",res);
break;
case 9:
res = listEmpty(L);
if(res){
printf("線性表的是空的");
}else{
printf("線性表的是不是空的");
}
break;
}
}
return OK;
}

線性表的特徵是:
1. 元素之間是有序的,如果元素存在多個,則第一個元素無前驅,最後一個無後繼,其它元素都有且只有一個前驅和後繼.
2. 元素個數是有限的. 當n=0是,稱為空表
線性表實現方式有兩種,分別是順序存儲結構和鏈式存儲結構,它們之間各有優缺點 . 根據需求的不同進行選擇不同的存儲結構.
線性表存儲結構的優缺點
優點:
1. 無須為表中元素之前的邏輯關系而增加額外的存儲空間
2. 可以快速的存取表中的任一位置的元素
缺點:
1. 插入和刪除操作需要移動大量元素
2. 當線性表長度變化較大時,難以確定存儲空間的容量.
3. 造成存儲空間的」碎片」.

2. 【100分】數據結構——使用C語言(線性表)

//c++的頭文件,我是用c++編寫的,有一些該成了C但是有些輸入輸出沒有改
//希望樓主不要建議哦,費了很久的時間寫的啊!
#include<iostream>//c++的頭文件
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<math.h>
#define error 0
#define OVERFLOW 1
#define OK 1
using namespace std;//c++的一個指令
typedef struct
{
int *elem; //存儲空間基址
int length; //當前長度
int listsize;//當前分配的存儲容量
// (以sizeof(ElemType)為單位)
//int *next;
}sqlist;

void initList(sqlist &La)
{//構造一個空線性表L
La.elem=(int *) malloc(100 *sizeof(int));//分配空間
if (!La.elem) exit(-2);//未分配則 跳出;
La.length=0;
La.listsize= 100 ;
}

int Listinsert_sq(sqlist &L,int i,int e) // listinsert_sq;插入一個元素
{int *newbase;int *p,*q;
if (i<1 || i>L.length+1) return error;
if (L.length>=L.listsize)//空間不足追加
{newbase=(int*) realloc(L.elem,(L.listsize+10) *sizeof(int));
if (!newbase)
exit(-2);
L.elem=newbase; L.listsize+=10 ;
return 0;
}
q=&(L.elem[i-1]);//指針指向確定插入的位子
for(p=&(L.elem[L.length-1]);p>=q;--p)
*(p+1)=*p;//指針後移
*q=e; //實現元素的插入
++L.length;
return 0;
}
int ListDelete_sq(sqlist &L,int i)//刪除i位子的元素
{int *p,*q;
if((i<1)||(i>L.length)) return 0;
p=&(L.elem[i-1]);
//e=*p;
cout<<"被刪除的值是:"<<*p<<endl;
for(q=&(L.elem[L.length-1]);p<q;p++)
*p =*(p+1);//指針前移,覆蓋前面的存儲的數據
--L.length;
return 1;
}
int Getelem(sqlist &L)//輸入表的數據
{ int n;
cout<<"輸入數列的個數:"<<endl;
cin>>n;
printf("按大小順序輸入n個數:");//cout<<"按大小順序輸入n個數:";
if(n<0||n>L.listsize ) return 0;
for(int i=0;i<n;i++)//循環輸入元素
{ cin>>L.elem [i];
L.length ++;//表長度
}
cout<<"這數列的長度:"<<L.length <<endl;
return 1;
}
int Poplist(sqlist &L)//輸出函數
{
for(int j=0;j<L.length ;j++)
cout<<L.elem[j]<<" ";
printf("\n");//cout<<endl;
return 0;
}
void ListMerge(sqlist La,sqlist Lb, sqlist &Lc)//合並函數,
{ int *pa,*pb,*pa_list ,*pb_list,*pc;
pa=La.elem;pb=Lb.elem;//用pa和pb指向表頭
Lc.length=La.length+Lb.length;
Lc.listsize=Lc.length;
Lc.elem=(int *)malloc(Lc.listsize*sizeof(int ));//合理分配Lc的空間
if(!Lc.elem) exit(-2);
pa_list=&(La.elem[La.length-1]);pb_list=&(Lb.elem[Lb.length-1]);//用pa-list和pb_list指向表未
pc=Lc.elem;
while(pa<=pa_list&&pb<=pb_list)//合並演算法
{ if(*pa>=*pb){ *pc++=*pb++;*pc++=*pa++;}

//if(*pa=*pb){ *pc++=*pa++;*pc++=*pb++; }

else {*pc++=*pa++;*pc++=*pb++;}
}
while(pa<=pa_list) *pc++=*pa++;//插入剩餘的元素;
while(pb<=pb_list) *pc++=*pb++;
}
int main()
{ sqlist La,Lb,Lc;int i,e;
initList(La);
Getelem(La);
initList(Lb);
Getelem(Lb);
ListMerge(La,Lb,Lc);
Poplist(Lc);
printf("input munber 要刪除的位子i \n:");
scanf("%d",&i);// cin>>i;
ListDelete_sq(La,i);
Poplist(La);//我這里是用表La做例子。也可用Lb。。。
printf("輸出要插入的位子和元素:\n");
scanf("%d%d",&i,&e);//cin>>i>>e;
Listinsert_sq(Lb,i,e);
Poplist(Lb);//我這里是用表Lb做例子。也可用La。。。
return 0;
}
終於全搞定了,還有些不足,希望對樓主有用!

3. 數據結構 線性表 用c語言

#define MAXSIZE 100 //表中元素的最大個數

typedef int ElemType;//元素類型

typedef struct list{

ElemType elem[MAXSIZE];//靜態線性表

int length; //表的實際長度

}SqList;//順序表的類型名

4. 數據結構中,怎麼用C語言構造線性表!

#define
OK
1
#define
ERROR
-1
#define
MAX_SIZE
100
typedef
int
Status
;
typedef
int
ElemType
;
typedef
struct
sqlist
{
ElemType
Elem_array[MAX_SIZE]
;
int
length
;
}
SqList
;
以上為線性表建立的相關定義
Status
Init_SqList(
SqList
*L
)
{
L->elem_array=(
ElemType
*
)malloc(MAX_SIZE*sizeof(
ElemType
)
)
;
if
(
!L
->
elem_array
)
return
ERROR
;
else
{
L->length=
0
;
return
OK
;
}
}
以上為線性表初始化函數
有以上兩部分可構造一個線性表

5. 數據結構c語言版,第二章線性表

說實話,我本學期也開數據結構,只不過教我們的是一個年過60的老爺爺。水平就不說了,你想要答案,我沒有,我這有思路,前5個要求我可以解決。我說一下思路:
如果想按書上的那種方式來編寫代碼,你需要一定的指針知識,不然說了你也看不懂。看下面:
這一步是定義,別說這你也看不懂:
typedef struct LNode /*定義結點*/
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
下面這步是初始化鏈表,這步中,你要注意幾個問題,第一個是LinkList *L,你可以看成雙指針。指針不好可以復習下。:
InitList(LinkList *L) /*初始化*/
{(*L)=(LinkList)malloc(sizeof(LNode));
if(!(*L)) return 0;
(*L)->next=NULL;
}
這一步:是建立和插入操作,你看得懂這步,那麼刪除就不難了
CreatList(LinkList *L,int n) /*建立*/
{ int i,e;
for(i=1;i<=n;i++)
{
scanf("%d",&e);
InsertList(L,i,e);
}
}
InsertList(LinkList *L,int i,ElemType e) /*把e插入第i個位置*/
{LinkList p,s;
int j=0;
p=*L;
while(p!=NULL && j<i-1){p=p->next;j++;}
if(p==NULL || j>i-1) return 0;
s=(LinkList)malloc(sizeof(LNode));
s->next=p->next;
p->next=s;
s->data=e;
return 1;
}
這一步是刪除,看看是不是和書上的很像?
DeleteList(LinkList *L,int i,ElemType e){
LinkList q,p,s;
int j=0;
p=*L;
while(p->next&&j<i-1){
p=p->next;
j++;
}
if(!p||j>i-1){
return 0;
}
q=p->next;
p->next=q->next;
e=q->data;
free(q);
return e;
}
授之以漁,下面的我就不多說了。不懂得說,

6. 數據結構(c語言版)數據類型線性表的實現

常用的線性表的插入,刪除,創建,按位置查找,按值查找,排序。其他操作都是基於以上基本操作實現的,你所謂的12個操作:排序有很多方法,插入類,選擇類,交換類,歸並類,基數排序法等,這些都是線性表的操作。
一般本科階段教學大綱中掌握上面的內容即可。

7. 數據結構(C語言版)線性表的操作

//---------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int *elem;
int length;
int listsize;
}sqlist;
void initlist_sq(sqlist *L){ /*注意這里*/
L->elem=(int *)malloc(5*sizeof(sqlist)); /*注意這里*/
if(!L->elem) /*注意這里*/
exit(0);
L->length=0; /*注意這里*/
L->listsize=5; /*注意這里*/
}
int main()
{
int i;
sqlist p;
initlist_sq(&p); /*注意這里*/
for(i=0;i<5;i++)
{
printf("%d ",i);
scanf("%d",&p.elem[i]);
p.listsize++;
}
printf("%d\n",p.listsize);
for(i=0;i<5;i++)
{
printf("%d\n",p.elem[i]);
p.listsize--;
}
printf("%d",p.listsize);

}
//---------------------------------------------------------------------------

8. c語言數據結構線性表求解

#include<stdio.h>
#include<stdlib.h>

#defineMAXSIZE100/*線性表的最大長度*/
typedefintElemType;
//描述線性表
typedefstruct{
ElemTypedata[MAXSIZE];
intlength;/*當前表的長度*/
}SeqList;

//初始化線性表
SeqList*init_SeqList(){
SeqList*L=(SeqList*)malloc(sizeof(SeqList));
L->length=0;
returnL;
}

//插入
voidInsertList(SeqList*L,inti,ElemTypee){
intk;
if(L->length==0||i==L->length){
L->data[L->length]=e;
++L->length;
return;
}
if(i<1||i>L->length){
printf("Thepositionismistake! ");
printf("插入數據%d失敗。 ",e);
return;
}
for(k=L->length;k>=i;k--)
L->data[k]=L->data[k-1];/*結點移動*/
L->data[i-1]=e;
L->length++;
}

//刪除元素
intsqListDelete(SeqList*L,inti){//???????
intk;
if(i<1||i>=L->length){/*檢查刪除位置的合法性*/
printf("Thepositionismistake!");
return0;
}
for(k=i-1;k<L->length;k++)
L->data[k]=L->data[k+1];/*向前移動*/
L->length--;
returni;
}

//
intSqlistLcate(SeqList*L,ElemTypex){//??????
inti;
for(i=0;i<L->length;i++){
if(L->data[i]==x)
returni+1;/*返回的是存儲位置*/
}
return-1;
}

voidShow(SeqList*list){
for(inti=0;i<list->length;++i)
printf("%d",list->data[i]);
printf(" ");
}

//主函數
intmain(){
intx,loc;
inti;
SeqList*list=init_SeqList();
//添加10個數字給線性表list
printf("pleaseinput10numbers:");
for(i=0;i<10;i++){
scanf("%d",&x);
InsertList(list,i,x);
}
Show(list);
printf("在第2個位置插入一個元素999後 ");
InsertList(list,2,999);
Show(list);
printf("刪除元素%d後。 ",list->data[5-1]);
sqListDelete(list,5);
Show(list);
//查找
loc=SqlistLcate(list,4);
if(loc>=0)printf("第4個元素是:%d ",list->data[loc]);
elseprintf("沒有找到第4個元素。 ");
return0;
}

熱點內容
安卓在哪裡找游戲 發布:2025-07-04 22:15:25 瀏覽:241
路由器訪問光貓 發布:2025-07-04 22:07:47 瀏覽:897
資料庫顯示語句 發布:2025-07-04 22:04:30 瀏覽:740
編程課道具 發布:2025-07-04 22:04:02 瀏覽:844
華為手機不是安卓什麼時候可以更新米加小鎮 發布:2025-07-04 22:01:37 瀏覽:785
飢荒伺服器搭建視頻 發布:2025-07-04 21:48:38 瀏覽:523
github上傳文件夾 發布:2025-07-04 21:29:22 瀏覽:1003
php課程學習中心 發布:2025-07-04 21:29:16 瀏覽:298
win7加密文件夾如何解密 發布:2025-07-04 21:25:24 瀏覽:555
為啥系統緩存的垃圾多呢 發布:2025-07-04 21:15:45 瀏覽:952