1. 程式人生 > >全面瞭解資料結構之順序表

全面瞭解資料結構之順序表

此為順序表的一個C語言實現過程,其中對每一行程式碼進行了標註,同時為了方便理解順序表的儲存,邏輯與物理是相同的。也將儲存地址一同顯示出來了。

#include<stdio.h>
#include<stdlib.h>
#define MAX 1024
typedef struct
{
	int data[MAX];//data是個陣列,定義了最大長度的陣列
	int last;//就是個位置,沒有特殊含義
}linearlist;

//定義指標是傳入地址,直接對數進行操作 
void Listlist(linearlist* list)
{
	int i;
	printf("當前線性表的狀態:\n"
); if(list->last==0)//宣告物件list,物件內賦值位置成員last printf("當前順序表為空"); else for(i=0;i<(list->last);i++) printf("註釋正在遍歷陣列,輸出所有值\n"); printf("[%4d]",list->data[i]);//小於值,則遍歷輸出陣列 printf("\n"); } void Output(linearlist* list) { system("cls"); printf("----------------順序表--------------\n"
); printf("- a:追加一個節點 i:插入一個節點 -\n"); printf("- d:刪除一個節點 e:退出 -\n"); printf("--------------升級版----------------\n"); printf("此時順序表(陣列)的長度:%d\n",list->last);//list的last是從0開始的 int i; for(i=0;i<list->last;i++)//35 printf("資料是%d,儲存地址是%d\n",list->data[i],&list->data[i]
);//34 Listlist(list); } linearlist* CreateList() { linearlist* list=(linearlist*)malloc(sizeof(linearlist));//分配地址空間,相當於java、c++的new方法 list->last=0;//對第一個賦值為零,此時陣列內為0 return list; } void AppendNode(linearlist* list,int n)//追加結點 { if(list->last<MAX)//如果此時最後一個數的位置小於預定義的陣列的長度,則執行 { list->data[list->last]=n;//直接定位到陣列的相應元素 list->last+=1;//陣列或順序表的長度 } } void InsertNode(linearlist* list,int n,int pos){//插入結點 int j; if(pos<0||pos>(list->last))//53 printf("超出順序表的範圍!"); else { for(j=list->last;j>=pos;j--) list->data[j+1]=list->data[j];//插入結點後每個元素向後移動一個單位 list->data[pos]=n;//對插入的單位進行賦值 list->last++;//最大值增加一個 } } void DeleteNode(linearlist* list,int pos)//刪除結點 { int j; if(pos<0||(pos>list->last))//超出陣列範圍 printf("刪除的節點位置超出順序標的範圍!"); else { for(j=pos;j<list->last;j++) list->data[j]=list->data[j+1];//每個資料都向前移動一個位置 list->last--; } } void pritln(linearlist* list) { int i; for(i=0;i<list->last;i++)//35 printf("資料是%d,儲存地址是%d\n",list->data[i],&list->data[i]);//34 } int main() { int key,pos; char ch; linearlist* list; list=CreateList(); while(1)//此處是一個無限迴圈 { Output(list);//每次新增完資料後都執行此語句,清空介面 printf("請選擇"); ch=getchar(); fflush(stdin); if(ch=='a') { printf("請輸入要追加的資料"); scanf("%d",&key); AppendNode(list,key); } else if(ch=='i') { printf("請輸入要插入的位置"); scanf("%d",&pos);//100 printf("請輸入要插入的資料"); scanf("%d",&key); InsertNode(list,key,pos); } else if(ch=='d') { printf("請輸入要刪除的位置"); scanf("%d",&pos); DeleteNode(list,pos); } else if(ch=='e') exit(0); Output(list); fflush(stdin);//清空輸入輸出 } pritln(list); return 0; }

本文是根據課本《C語言從入門到精通》中的順序表整理出來的。如有侵權,請直接聯絡我。本部落格將會很快刪除