1. 程式人生 > >【資料結構】線性表的順序儲存

【資料結構】線性表的順序儲存

這段時間準備將書上的資料結構全部自己實踐一遍。
線性表是有序和有限的,分順序儲存和鏈式儲存。
本篇記錄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); }