當前位置:首頁 » 編程語言 » 輸出線性表c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

輸出線性表c語言

發布時間: 2022-12-25 18:54:05

① 誰能給一個簡單的線性表操作c語言完整程序

1、線性表有兩種:

typedefstruct{

ElemType*elem;

intlength;

intlistsize;

}sqlist;//順序表


voidInitList_Sq(SqList&l){

l.elem=newElemType[LIST_INIT_SIZE];

l.length=0;

l.listsize=LIST_INIT_SIZE;

}//初始化順序表

然後SqListLa;

InitList_Sq(La);

就可以


typedefstructLnode{

intdata;

structLnode*next;

}Lnode,*LinkList;//線性鏈表

//單鏈表可以有效的利用主存的碎片,它的數據域不是連續的


2、常式:

#include"stdio.h"
#include<malloc.h>
typedefcharElemType;
typedefstructLNode
{ElemTypedata;
structLNode*next;
}LinkList;
voidCreatListF(LinkList*&L,ElemTypea[],intn)//頭插法建表
{
LinkList*s;inti;
L=(LinkList*)malloc(sizeof(LinkList));
L->next=NULL;
for(i=0;i<n;i++)
{
s=(LinkList*)malloc(sizeof(LinkList));
s->data=a[i];
s->next=L->next;
L->next=s;
}
}
voidCreateListR(LinkList*&L,ElemTypea[],intn)//尾插法建表
{
LinkList*s,*r;inti;
L=(LinkList*)malloc(sizeof(LinkList));
r=L;
for(i=0;i<n;i++)
{
s=(LinkList*)malloc(sizeof(LinkList));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}
voidInitList(LinkList*&L)//初始化線性表
{
L=(LinkList*)malloc(sizeof(LinkList));
L->next=NULL;
}
voidDestroyList(LinkList*&L)//銷毀線性表
{
LinkList*p=L,*q=p->next;
while(q!=NULL)
{
free(p);
p=q;
q=p->next;
}
free(p);
}
intListEmpty(LinkList*L)//判斷線性表是否為空
{
return(L->next==NULL);
}
intListLength(LinkList*L)//求線性表的長度
{
LinkList*p=L;intn=0;
while(p->next!=NULL)
{
n++;p=p->next;
}
return(n);
}
voidDispList(LinkList*L)//輸出線性表
{
LinkList*p=L->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
}
intGetElem(LinkList*L,inti,ElemType&e)//求線性表中某個數據元素值
{
intj=0;
LinkList*p=L;
while(j<i&&p!=NULL)
{
j++;p=p->next;
}
if(p==NULL)
return0;
else
{
e=p->data;return1;
}
}
intLocateElem(LinkList*L,ElemTypee)//按元素值查找
{
LinkList*p=L->next;
inti=1;
while(p!=NULL&&p->data!=e)
{
p=p->next;i++;
}
if(p==NULL)return(0);
elsereturn(i);
}
intListInsert(LinkList*&L,inti,ElemTypee)//插入數據元素
{
intj=0;
LinkList*p=L,*s;
while(j<i-1&&p!=NULL)
{
j++;p=p->next;
}
if(p==NULL)return0;
else
{
s=(LinkList*)malloc(sizeof(LinkList));
s->data=e;s->next=p->next;p->next=s;
return1;
}
}
intListDelete(LinkList*&L,inti,ElemType&e)//刪除數據元素
{
intj=0;
LinkList*p=L,*q;
while(j<i-1&&p!=NULL)
{
j++;p=p->next;
}
if(p==NULL)
return0;
else
{
q=p->next;
if(q==NULL)return0;
e=q->data;
p->next=q->next;
free(q);
return1;
}
}
intmain()
{
ElemTypee,a[5]={'a','b','c','d','e'};
LinkList*h;
InitList(h);//初始化順序表h
CreateListR(h,&a[0],5);//依次採用尾插入法插入a,b,c,d,e元素
printf("單鏈表為:");
DispList(h);printf(" ");//輸出順序表h
printf("該單鏈表的長度為:");
printf("%d",ListLength(h));printf(" ");//輸出順序表h的長度
if(ListEmpty(h))printf("該單鏈表為空。 ");
elseprintf("該單鏈表不為空。 ");//判斷順序表h是否為空
GetElem(h,3,e);printf("該單鏈表的第3個元素為:");
printf("%c",e);printf(" ");//輸出順序表h的第3個元素
printf("該單鏈表中a的位置為:");
printf("%d",LocateElem(h,'a'));printf(" ");//輸出元素'a'的位置
ListInsert(h,4,'f');//在第4個元素位置插入'f'素
printf("在第4個元素位置上插入'f'後單鏈表為:");
DispList(h);printf(" ");//輸出順序表h
ListDelete(h,3,e);//刪除L的第3個元素
printf("刪除第3個元素後單鏈表為:");
DispList(h);printf(" ");//輸出順序表h
DestroyList(h);//釋放順序表h
return0;
}

② C語言——線性表

#include"stdio.h"
#include<malloc.h>

typedef char ElemType;

typedef struct LNode
{ElemType data;
struct LNode *next;
}LinkList;

void CreatListF(LinkList *&L,ElemType a[],int n) //頭插法建表
{
LinkList *s;int i;
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
for(i=0;i<n;i++)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=a[i];
s->next=L->next;
L->next=s;
}
}

void CreateListR(LinkList *&L,ElemType a[],int n) //尾插法建表
{
LinkList *s,*r;int i;
L=(LinkList *)malloc(sizeof(LinkList));
r=L;
for(i=0;i<n;i++)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}

void InitList(LinkList *&L) //初始化線性表
{
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
}

void DestroyList(LinkList *&L) //銷毀線性表
{
LinkList *p=L,*q=p->next;
while(q!=NULL)
{
free(p);
p=q;
q=p->next;
}
free(p);
}

int ListEmpty(LinkList *L) //判斷線性表是否為空
{
return(L->next==NULL);
}

int ListLength(LinkList *L) //求線性表的長度
{
LinkList *p=L;int n=0;
while(p->next!=NULL)
{
n++;p=p->next;
}
return(n);
}

void DispList(LinkList *L) //輸出線性表
{
LinkList *p=L->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
}

int GetElem(LinkList *L,int i,ElemType &e) //求線性表中某個數據元素值
{
int j=0;
LinkList *p=L;
while(j<i&&p!=NULL)
{
j++;p=p->next;
}
if(p==NULL)
return 0;
else
{
e=p->data;return 1;
}
}

int LocateElem(LinkList *L,ElemType e) //按元素值查找
{
LinkList *p=L->next;
int i=1;
while(p!=NULL&&p->data!=e)
{
p=p->next;i++;
}
if(p==NULL)return(0);
else return(i);
}

int ListInsert(LinkList *&L,int i,ElemType e) //插入數據元素
{
int j=0;
LinkList *p=L,*s;
while(j<i-1&&p!=NULL)
{
j++;p=p->next;
}
if(p==NULL)return 0;
else
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=e; s->next=p->next; p->next=s;
return 1;
}
}

int ListDelete(LinkList *&L,int i,ElemType &e) //刪除數據元素
{
int j=0;
LinkList *p=L,*q;
while(j<i-1&&p!=NULL)
{
j++;p=p->next;
}
if(p==NULL)
return 0;
else
{
q=p->next;
if(q==NULL)return 0;
e=q->data;
p->next=q->next;
free(q);
return 1;
}
}

int main()
{
ElemType e,a[5]={'a','b','c','d','e'};
LinkList *h;

InitList(h); //初始化順序表h
CreateListR(h,&a[0],5); //依次採用尾插入法插入a,b,c,d,e元素
printf("單鏈表為:");
DispList(h); printf("\n"); //輸出順序表h

printf("該單鏈表的長度為:");
printf("%d",ListLength(h)); printf("\n"); //輸出順序表h的長度
if(ListEmpty(h)) printf("該單鏈表為空。\n");
else printf("該單鏈表不為空。\n"); //判斷順序表h是否為空

GetElem(h,3,e);printf("該單鏈表的第3個元素為:");
printf("%c",e); printf("\n"); //輸出順序表h的第3個元素
printf("該單鏈表中a的位置為:");
printf("%d",LocateElem(h,'a')); printf("\n"); //輸出元素'a'的位置

ListInsert(h,4,'f'); //在第4個元素位置插入'f'素
printf("在第4 個元素位置上插入'f'後單鏈表為:");
DispList(h); printf("\n"); //輸出順序表h

ListDelete(h,3,e); //刪除L的第3個元素
printf("刪除第3個元素後單鏈表為:");
DispList(h); printf("\n"); //輸出順序表h

DestroyList(h); //釋放順序表h
return 0;
}

③ C語言線性表急求大神解

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

typedef struct
{
int *data,len;
}SL;

void showlist(SL *l)
{
int i;

for(i=0;i<(*l).len-1;i++)
{
printf("%d ",(*l).data[i]);
}
printf("%d\n",(*l).data[(*l).len-1]);
}

void createlist(SL *l)
{
int i,n;

printf("請輸入線性表的長度:");
scanf("%d",&n);
(*l).len=n;
(*l).data=(int*)calloc(n,sizeof(int));
printf("請輸入%d個整數:",n);
for(i=0;i<n;i++)
scanf("%d",(*l).data+i);
}

//找到,返回第1次出現的下標,
//找不到返回-1
int search(SL *l,const int n)
{
int i;

for(i=0;i<(*l).len;i++)
{
if(n==(*l).data[i])
return i;
}
return -1;
}

//n為要刪除的整數的值,
//會刪除所有值為n的線性表的元素
void delete(SL *l,const int n)
{
int i,j;

for(i=0;i<(*l).len;)
{
if(n==(*l).data[i])
{
for(j=i+1;j<(*l).len;j++)
{
(*l).data[j-1]=(*l).data[j];
}
(*l).len--;
}
else
i++;
}
}

void deleterange(SL *l,const int min,const int max)
{
int i;

for(i=0;i<(*l).len;i++)
{
if((*l).data[i]>=min && (*l).data[i]<=max)
delete(l,(*l).data[i]);
}
}

void freelist(SL *l)
{
if(!(*l).data)
free((*l).data);
}

int main()
{
int loc,tofind,min,max;
SL l;

createlist(&l);
printf("請輸入要查找的整數:");
scanf("%d",&tofind);
if(-1!=(loc=search(&l,tofind)))
printf("此數據在線性表中第1次出現的下標是:%d\n",loc);
else
puts("線性表中無此數據");
printf("請輸入要刪除的整數的最小值 最大值:");
scanf("%d %d",&min,&max);
deleterange(&l,min,max);
printf("刪除值為%d-%d的元素後的線性表如下:\n",min,max);
showlist(&l);
freelist(&l);
system("PAUSE");
return 0;
}

④ C語言線性表的問題

數據*la,*lb沒有初始化,其他還有一點小問題,看代碼

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

typedefstruct{
int*data;
intlength;
intsize;
}sqlist;

intsqlist_est(sqlist*l){
l->data=(int*)malloc(N*sizeof(int));
l->length=0;
l->size=N;
return1;
}

voidsqlist_input(sqlist*l){
inti,c,b;
for(i=0;i<=l->size-1;i++){
printf("pleaseinputthe%ddata:",i);
scanf("%d",&c);
if(b=getchar()==' ')break;
else{
l->data[i]=c;
l->length++;
}
}
}


voidsqlist_sort(sqlist*l){
intp,q,temp;
for(p=0;p<l->length-1;p++)
for(q=0;q<l->length-1-p;q++)
if(l->data[q]>l->data[q+1]){
temp=l->data[q];
l->data[q]=l->data[q+1];
l->data[q+1]=temp;
}
}


intsqlist_insert(sqlist*l,intplace,intdat){
int*news,i;
if(l->length>=l->size){
news=(int*)realloc(l->data,(l->size+ADD)*sizeof(int));
l->data=news;
l->size=l->size+ADD;
}
for(i=l->length-1;i>=place-1;i--)
l->data[i+1]=l->data[i];
l->data[place-1]=dat;
l->length++;
return1;
}


voidsqlist_del(sqlist*l,intdelplace){//函數類型錯了
inti;
for(i=delplace-1;i<=l->length-1;i++)
l->data[i]=l->data[i+1];
l->length--;
}


intsqlist_merge(sqlist*la,sqlist*lb){
inti,n,*news;
n=la->length;
if(la->length+lb->length>la->size){
news=(int*)realloc(la->data,(la->size+la->size)*sizeof(int));
la->data=news;
la->size*=2;
}
for(i=0;i<=lb->length-1;i++){
la->data[n]=lb->data[i];
n++;
la->length++;
}
return1;
}


voidsqlist_print(sqlist*l){
inti;
for(i=0;i<l->length-1;i++)
printf("%d",l->data[i]);
}


voidmain(){
intplace,delplace,dat,choose;
sqlist*la=newsqlist,*lb=newsqlist;//初始化數據
while(1){
printf("1~創建線性表 ");
printf("2~向線性表中輸入數據 ");
printf("3~將線性表中的數據進行排序 ");
printf("4~向線性表中插入一個數據 ");
printf("5~刪除線性表中的一個數據 ");
printf("6~合並兩個線性表 ");
printf("7~輸出線性表 ");
printf("請輸入你的選擇:");
scanf("%d",&choose);
switch(choose)
{case1:sqlist_est(la);break;
case2:sqlist_input(la);break;
case3:sqlist_sort(la);break;
case4:{printf("請輸入插入的位置數據:");
scanf("%d%d",&place,&dat);
sqlist_insert(la,place,dat);
};break;
case5:{printf("請輸入要刪除的位置:");
scanf("%d",&delplace);//少了數據輸入
sqlist_del(la,delplace);
};break;
case6:{sqlist_est(lb);
printf("現在請輸入要合並的線性表的數值:");
sqlist_input(lb);
sqlist_merge(la,lb);
};break;
case7:sqlist_print(la);break;
}
}
}

⑤ C語言創建一個線性表,然後輸出線性表,如何編寫程序

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

#defineOVERFLOW -2
#define OK 1
#define ERROR 0
#defineLIST_INIT_SIZE 100
#defineLISTINCREMENT 10

typedef intElemType;
typedef intStatus;
//定義順序存儲結構
typedef struct
{
ElemType *elem;
int length;
int listsize;
}SqList;
//初始化順序表
StatusInitList_Sq(SqList &L)
{
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem ) exit(ERROR);
L.length =0;
L.listsize =LIST_INIT_SIZE;
return OK;
}
//自定義創建順序表
voidCreate_SqList(SqList &L)
{
int c,i=0;
int *newBase;
printf("請輸入順序表元素:\n");
while((scanf("%d",&c))!=EOF)
{
if(i>=L.listsize) //自定義順序表大小超過初始化大小
{
newBase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
//為初始順序表以LISTINCREMENT大小重新增加存儲空間
if(!newBase)exit(OVERFLOW);
L.elem=newBase;
L.listsize+=LISTINCREMENT;
}
L.elem[i++]=c;
}
L.length=i;
printf("輸入的順序表元素:\n");
for(i=0;i<L.length;i++)
printf("%d ",L.elem[i]);
printf("\n");
}
//在指定位置插入元素
StatusListInsert(SqList &L,int i,ElemType e)
{
ElemType *p,*q,*newbase;
if(i<1||i>L.length+1)
{
printf("插入位置錯誤\n");
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;
}
if(i==L.length) L.elem[i+1]=e;
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;
*q=e;
++L.length;
return OK;
}
//在指定位置刪除元素
StatusListDelete_Sq(SqList &L,int i,ElemType *e)
{
ElemType *p,*q;
if(i<1||i>L.length+1)
return ERROR;
p=&(L.elem[i-1]);
*e=*p;
q=L.elem+L.length-1;
for(++p;p<=q;++p)
*(p-1)=*p;
--L.length ;
return OK;
}

void main()
{
SqList L;
int m,n;
int location,element;
if(!InitList_Sq(L))
{
printf("初始化順序表失敗!\n");
exit(ERROR);
}
Create_SqList(L);
for(m=0;m<3;m++)
{
printf("輸入插入位置:");
scanf("%d",&location);
while(location>L.length+1||location<1)
{
printf("輸入位置錯誤,請重新輸入!\n");
scanf("%d",&location);
}
printf("插入元素:");
scanf("%d",&element);
if(!ListInsert(L,location,element))
{
printf("順序表插入失敗!\n");
exit(ERROR);
}
printf("插入順序表為:\n");
for(int i=0;i<=L.length -1;i++)
{
printf("%d ",L.elem[i]);
}
printf("\n新順序表一共有%d個元素。\n",L.length);
}
for(n=0;n<3;n++)
{
printf("輸入刪除位置:");
scanf("%d",&location);
while(location>L.length||location<1)
{
printf("輸入位置錯誤,請重新輸入!\n");
scanf("%d",&location);
}
if(!ListDelete_Sq(L,location,&element))
{
printf("刪除錯誤!\n");
exit(ERROR);
}
printf("被刪除的元素為:%d \n",element);

printf("被刪除後的順序表為:\n");
for(int j=0;j<=L.length-1;j++)
{
printf("%d ",L.elem[j]);
}
printf("\n新順序表一共有%d個元素。\n",L.length);
}
}
這個是我最近編寫的 順序表也是線性表的
這里還有鏈表的程序 用的話再傳給你

⑥ 如何用C語言寫一個函數輸出線性表中指定范圍的數字

#include<stdio.h>

intmain(void)
{
intdata[]={2,5,15,30,1,40,17,50,9,21,32,8,41,22,49,31,33,18,50,5};
intnewdata[30];
inti,j=0;
for(i=0;i<sizeof(data);i++)
{
if(data[i]>=10&&data[i]<=30)
{
continue;
}
else
{
newdata[j]=data[i];
j++;
}
}
for(i=0;i<j;i++)
{
printf("%d",newdata[i]);
}
getchar();
return0;
}

這個代碼裡面的 data[]後面賦值你就輸入你的線性表 的數,代碼會自己查找並刪除。

data[i]>=10&&data[i]<=30

這句話就是范圍意思是 大於10小於30的數,刪除後的數組會存在newdata數組裡面

請採納!

⑦ C語言創建一個線性表,然後輸出線性表,如何編寫程序

#include #include #include #defineOVERFLOW-2 #defineOK1 #defineERROR0 #defineLIST_INIT_SIZE100 #defineLISTINCREMENT10 typedefintElemType; typedefintStatus; //定義順序存儲結構 typedefstruct { ElemType*elem; intlength; intlistsize; }SqList; //初始化順序表 StatusInitList_Sq(SqList&L) { L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L.elem)exit(ERROR); L.length=0; L.listsize=LIST_INIT_SIZE; returnOK; } //自定義創建順序表 voidCreate_SqList(SqList&L) { intc,i=0; int*newBase; printf("請輸入順序表元素:\n"); while((scanf("%d",&c))!=EOF) { if(i>=L.listsize)//自定義順序表大小超過初始化大小 { newBase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType)); //為初始順序表以LISTINCREMENT大小重新增加存儲空間 if(!newBase)exit(OVERFLOW); L.elem=newBase; L.listsize+=LISTINCREMENT; } L.elem[i++]=c; } L.length=i; printf("輸入的順序表元素:\n"); for(i=0;iL.length+1) { printf("插入位置錯誤\n"); 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; } if(i==L.length)L.elem[i+1]=e; q=&(L.elem[i-1]); for(p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p; *q=e; ++L.length; returnOK; } //在指定位置刪除元素 StatusListDelete_Sq(SqList&L,inti,ElemType*e) { ElemType*p,*q; if(i<1||i>L.length+1) returnERROR; p=&(L.elem[i-1]); *e=*p; q=L.elem+L.length-1; for(++p;p<=q;++p) *(p-1)=*p; --L.length; returnOK; } voidmain() { SqListL; intm,n; intlocation,element; if(!InitList_Sq(L)) { printf("初始化順序表失敗!\n"); exit(ERROR); } Create_SqList(L); for(m=0;m<3;m++) { printf("輸入插入位置:"); scanf("%d",&location); while(location>L.length+1||location<1) { printf("輸入位置錯誤,請重新輸入!\n"); scanf("%d",&location); } printf("插入元素:"); scanf("%d",&element); if(!ListInsert(L,location,element)) { printf("順序表插入失敗!\n"); exit(ERROR); } printf("插入順序表為:\n"); for(inti=0;i<=L.length-1;i++) { printf("%d",L.elem[i]); } printf("\n新順序表一共有%d個元素。\n",L.length); } for(n=0;n<3;n++) { printf("輸入刪除位置:"); scanf("%d",&location); while(location>L.length||location<1) { printf("輸入位置錯誤,請重新輸入!\n"); scanf("%d",&location); } if(!ListDelete_Sq(L,location,&element)) { printf("刪除錯誤!\n"); exit(ERROR); } printf("被刪除的元素為:%d\n",element); printf("被刪除後的順序表為:\n"); for(intj=0;j<=L.length-1;j++) { printf("%d",L.elem[j]); } printf("\n新順序表一共有%d個元素。\n",L.length); } } 這個是我最近編寫的順序表也是線性表的 這里還有鏈表的程序用的話再傳給你

⑧ 用c語言編寫程序1.建立一個線性表,輸入n個元素並輸出2.查找最大元素並輸出

線性表 可以使用鏈表 或者數組實現

以動態數組為例

#include<stdio.h>
#include<stdlib.h>
intmain()
{
int*a,n,max,i;
scanf("%d",&n);
a=(int*)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
scanf("%d",a+i);
for(i=1,max=a[0];i<n;i++)
if(max<a[i])max=a[i];
printf("%d ",max);
free(a);
return0;
}

⑨ c語言線性表的插入和輸出功能實現的代碼

#include"stdio.h"
#include"malloc.h"
#include"iostream.h"
typedef int elementype;
typedef struct link
{
elementype data;
struct link *next;
}link,*linklist;
int initlink(linklist l)
{
linklist p,q;
int n;
p=(link*)malloc(sizeof(linklist));
p=l;
while(1){
q=(linklist)malloc(sizeof(link));
printf("請輸入鏈表數據:");
scanf("%d",&n);
if(n==0) break;
q->data=n;
p->next=q;
p=q;

}

p->next=NULL;
return 1;
}
int insertlink(linklist l)
{
int a,b,j=0;
linklist p,s;
p=l;
printf("請輸入你要插入的位置:");
scanf("%d",&a);
printf("請輸入你要插入的數據:");
scanf("%d",&b);
while(p->next!=NULL&&j+1<a)
{
p=p->next;
j++;
}
s=(linklist )malloc(sizeof(linklist));
s->data=b;
s->next=p->next;

p->next=s;
return 1;

}
int printflink(linklist l)
{
linklist p;
p=l->next;
while(p!=NULL)
{
printf("%d\t",p->data);
p=p->next;
}
printf("\n");
return 1;
}
int main()
{
linklist l;
int a;
l=(linklist)malloc(sizeof(linklist));

l->next=NULL;
initlink(l);
printflink(l);
insertlink(l);
printflink(l);

return 1;
}

⑩ 線性表的基本操作c語言實現

代碼如下:

頭文件:

2_1.h

#ifndef _2_1_H

#define _2_1_H

typedef void SeqList;

typedef void SeqListNode;

//創建線性表

SeqList * SeqList_Create(int capacity);

//銷毀線性表

void SeqList_DesTroy(SeqList * list);

void SeqList_Clear(SeqList* list);

int SeqList_Length(SeqList* list);

int SeqList_Capacity(SeqList* list);

int SeqList_Insert(SeqList* list, SeqListNode* node, int pos);

SeqListNode* SeqList_Get(SeqList* list, int pos);

SeqListNode* SeqList_Delete(SeqList* list, int pos);

#endif

源文件:

// 順序線性表.cpp : 定義控制台應用程序的入口點。

//

#include "stdafx.h"

#include <malloc.h>

#include <stdlib.h>

#include "2_1.h"

typedef unsigned int TSeqListNode;

typedef struct {

int len; //長度

int capacity;//總長度

TSeqListNode * node;//每個節點的指針

} TSeqList;

int main()

{

SeqList* list = SeqList_Create(5);//創建線性表

int i = 6;//賦值6個變數,已超過線性表最大值 5

int j = 1;

int k = 2;

int x = 3;

int y = 4;

int z = 5;

int index = 0;

SeqList_Insert(list, &i, 7); //將這6個變數插入線性表中

SeqList_Insert(list, &j, 0);

SeqList_Insert(list, &k, 0);

SeqList_Insert(list, &x, 0);

SeqList_Insert(list, &y, 0);

SeqList_Insert(list, &z, 0);

//遍歷

for(index=0; index<SeqList_Length(list); index++)

{

int* p = (int*)SeqList_Get(list, index);

printf("%d ", *p);

}

printf(" ");

//刪除操作

while( SeqList_Length(list) > 0 )

{

int* p = (int*)SeqList_Delete(list, 0);

printf("刪除了: %d ", *p);

}

SeqList_Clear(list);

SeqList_DesTroy(list);

system("pause");

return 0;

}

//創建線性表

SeqList * SeqList_Create(int capacity)

{

TSeqList* ret = NULL ;

if(capacity >= 0)

{

ret = (TSeqList*)malloc(sizeof(TSeqList) + sizeof(TSeqListNode)*capacity); //為線性表分配空間,包含結 //構體和節點的總大小

}

if(NULL != ret)

{

ret->len = 0;

ret->capacity = capacity;

ret->node = (TSeqListNode*)(ret + 1);//將節點指向上述分配到的空間的後部分

}

return ret;

}

//銷毀

void SeqList_DesTroy(SeqList * list)

{

free(list);

}

//清空

void SeqList_Clear(SeqList* list)

{

TSeqList * ret = (TSeqList*)list;

if(NULL != ret)

{

ret->len = 0;

}

}

//獲得線性表的長度

int SeqList_Length(SeqList* list)

{

TSeqList * ret = (TSeqList*)list;

int len = -1;

if(NULL != ret)

{

len = ret->len;

}

return len;

}

//線性表的總長度

int SeqList_Capacity(SeqList* list)

{

TSeqList * ret = (TSeqList*)list;

int capacity = -1;

if(NULL != ret)

{

ret->capacity = capacity;

}

return capacity;

}

//插入

int SeqList_Insert(SeqList* list, SeqListNode* node, int pos)

{

TSeqList * sList = (TSeqList*)list;

int i,ret = -1;

if((sList != NULL) &&(pos >= 0) && sList->capacity >= sList->len+1)

{

if(pos >= sList->len)

{

pos = sList->len;

}

for(i = sList->len; i > pos; i--)

{

sList->node[i] = sList->node[i-1];

}

sList->node[i] = (TSeqListNode)node;

++sList->len;

ret = 1;

}

return ret;

}

//獲得指定位置的節點

SeqListNode* SeqList_Get(SeqList* list, int pos)

{

TSeqList * sList = (TSeqList*)list;

TSeqListNode* node = NULL;

if(NULL != sList && pos>=0 && pos < sList->len)

{

node = (TSeqListNode*)sList->node[pos];

}

return node;

}

//刪除

SeqListNode* SeqList_Delete(SeqList* list, int pos)

{

TSeqList * sList = (TSeqList*)list;

SeqListNode * node = SeqList_Get( list, pos);

int i;

if(sList != NULL && pos >= 0 && pos< sList->len)

{

for( i=pos+1; i<sList->len; i++)

{

sList->node[i-1] = sList->node[i];

}

sList->len--;

}

return node;

}

演示:

資料拓展:

線性表是最基本、最簡單、也是最常用的一種數據結構。

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

我們說「線性」和「非線性」,只在邏輯層次上討論,而不考慮存儲層次,所以雙向鏈表和循環鏈表依舊是線性表。

在數據結構邏輯層次上細分,線性表可分為一般線性表和受限線性表。一般線性表也就是我們通常所說的「線性表」,可以自由的刪除或添加結點。受限線性表主要包括棧和隊列,受限表示對結點的操作受限制。

線性表的邏輯結構簡單,便於實現和操作。因此,線性表這種數據結構在實際應用中是廣泛採用的一種數據結構。