【資料結構】線性表的順序儲存
阿新 • • 發佈:2019-01-26
這段時間準備將書上的資料結構全部自己實踐一遍。
線性表是有序和有限的,分順序儲存和鏈式儲存。
本篇記錄c語言實現順序儲存程式碼。
線性表歸檔
# include <stdlib.h>
# include <stdio.h>
# define MAXSIZE 100
# define ELEMENT int
typedef struct{
ELEMENT ele[MAXSIZE];
int last;
}SQLIST;
int initial(SQLIST **p){ //初始化連結串列
*p=(SQLIST *)malloc(sizeof(SQLIST));
if (!p)return -1;
else{
(*p)->last=-1;
return 0;
}
}
int insert(SQLIST *p,int i,ELEMENT a){//插入資料 i位置插入,資料為a
if(p->last==MAXSIZE){
printf("資料已滿\n");
return -1;
}
else{
if(i<=(p->last+1)&&i>-1){
if(i==p->last+1){//末尾插入
p->ele[i]=a;
p->last+=1;
return 0;
}
else{//非末尾插入
int count;
for(count=p->last;count>=i;count--){
p->ele[count+1]=p->ele[count];
}
p->ele[i]=a;
p->last+=1;
return 0;
}
}
else{
printf("插入位置有誤\n");
return -1;
}
}
}
void multiinsert(SQLIST *p){//多次插入資料
int n,num,pos, sig;
ELEMENT a;
printf("請輸入插入資料個數\n");
scanf("%d",&num);
for(n=0;n<num;n++){
printf("請輸入插入的資料\n");
scanf("%d",&a);
printf("請輸入插入資料的位置(0-%d)\n",(p->last)+1);
scanf("%d",&pos);
sig = insert(p,pos,a);
if (sig == -1)break;
int i;
printf("插入完成後線性順序表為\n");
for(i=0;i<=p->last;i++){
printf("%d,",p->ele[i]);
}
}
}
void deletelist(SQLIST *p){//刪除元素
printf("請輸入刪除第幾個元素\n");
int q,num;
scanf("%d",&q);
if(1<=q&&q<=p->last+1){
for(num=q-1;num<p->last;num++){
p->ele[num]=p->ele[num+1];
}
p->last=p->last-1;
int i;
printf("刪除完成後線性順序表為\n");
for(i=0;i<=p->last;i++){
printf("%d,",p->ele[i]);
}
}
else{
printf("刪除位置出錯\n");
}
}
int main(){
SQLIST *p;
int sig;
sig = initial(&p);
while(sig==-1){//分配失敗重新分配
sig = initial(&p);
}
multiinsert(p);
deletelist(p);
}