1_順序表基本操作

/*******date:2014.12.6*******/ 

順序表:

定義:就是按照順序存儲方式存儲的線性表,各 節點按照邏輯次序依次存放在計算機的一組連續的存儲單元中。 只要知道了首地址以及每個數據元素所佔的存儲長度,就可以計算出任何一個數據元素(數據節點)的位置;

節點類型相同的情況下:基地址LOC(a1);每個節點佔C個存儲單元;

                                       LOC(ai)=LOC(a1)+(i-1)*c     a≤i≤n;

基本操作:

準備數據:順序表的結構;

初始化:置0;

計算表長度:節點個數;

插入節點:從頭開始依次插入;後面點節點依次後移一位;

追加節點: 在末尾加節點;

刪除節點:後面的節點依次前移一位;

查找節點(按序號、關鍵字)

顯示所有節點。


#define MAXLEN 100     //定義順序表最大長度

typedef struct
{
char key[10];     //節點關鍵字
char name[20];
int age;
}DATA;                //定義節點類型

typedef struct         //定義順序表結構
{
DATA ListData[MAXLEN+1];     //保存順序表的結構數組
int ListLen;                 //順序表已存節點的數量

}SLType;


//初始化順序表

void SLInit(SLType * SL)
{
SL->ListLen=0;            //初始化爲空

}


//計算順序表長度
int SLLength(SLType * SL)
{
return(SL->ListLen);         

}


//插入節點
int SLInsert(SLType * SL,int n,DATA data)
{
int i;
if (SL->ListLen>=MAXLEN)
{
printf("順序表已滿,不能插入");
return 0;
}
if (n<1||n>SL->ListLen-1)
{
printf("插入序號錯誤,不能插入元素");
return 0;
}
for (i=SL->ListLen;i>=n;i--)
{
SL->ListData[i+1]=SL->ListData[i];
}
SL->ListData[n]=data;
SL->ListLen++;
return 1;

}


//追加節點
int SLAdd(SLType * SL,DATA data)
{
if (SL->ListLen>=MAXLEN)
{
printf("順序表已滿,不能再添加節點了");
return 0;
}
SL->ListData[++SL->ListLen]=data;
return 1;

}


//刪除節點
int SLDelete(SLType * SL,int n)
{
int i;
if (i>SL->ListLen+1||i<1)
{
printf("刪除節點錯誤,不能刪除節點");
return 0;
}
for (i=n;i<SL->ListLen;i++)
{
 SL->ListData[i]=SL->ListData[i+1];
}
SL->ListLen--;
return 1;

}


//按序號查找節點
DATA * SLFindByNum(SLType * SL,int n)
{
if (n<1||n>SL->ListLen+1)
{
printf("節點序號錯誤,不能反回結果");
return NULL;
}
else
return &(SL->ListData[n]);

}


//按關鍵字查找節點
int SLFindByCont(SLType * SL,char * key)
{
int i;
for (i=1;i<=SL->ListLen;i++)
{
if (strcmp(SL->ListData[i].key,key)==0)
{
return i;
}
}
return 0;

}


//顯示所有節點
int SLAll(SLType * SL)
{
int i;
for (i=1;i<=SL->ListLen;i++)
{
printf("(%s %s %d)\n",SL->ListData[i].key,SL->ListData[i].name,SL->ListData[i].age);
}
return 0;
}


//另外,還學了一個清空操作 ---> fflush(stdin);      //清空輸入緩衝區
  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章