1. 程式人生 > 程式設計 >C語言實現靜態連結串列

C語言實現靜態連結串列

本文例項為大家分享了C語言實現靜態連結串列的具體程式碼,供大家參考,具體內容如下

注意事項:

1、這裡用k申請空間,i遍歷空間。
2、靜態連結串列是利用遊標來模擬指標,把固定分配的記憶體分成備用連結串列和連結串列兩大塊,在利用自制的malloc和free函式申請釋放備用空間時,實現離散儲存。
3、基本操作和動態連結串列實際上差不多,不過一個是利用p = p->next一個是使用i = L[i].cur來實現指標的後移。
4、初始化連結串列時,連結串列只有最後一個空間的cur是0,意味是頭指標,並沒有任何分配的空間。備用連結串列的頭指標是空間的第一個位置,最後一個指標的cur也是0。 0 在靜態連結串列中也意味著NULL;

5、使用動態連結串列思維,cur成員可以看成指標,裡面存的哪個單元的下標,就相當於指向哪個單元。

#include<stdio.h>
#include<stdlib.h>
 
typedef struct
{
 int data;
 int cur;
}component,SLinkList[100];
 
int Malloc(SLinkList space)
{
 int i = space[0].cur;
 if (i)
 space[0].cur = space[i].cur;
 return i;
 
}
 
void Free(SLinkList space,int k)
{
 space[k].cur = space[0].cur;
 space[0].cur = k;
}
void Creat(SLinkList L)
{
 int i;
 L[99].cur = 0;
 for (i = 0; i < 98; i++)
 L[i].cur = i + 1;
 L[98].cur = 0;
 
}
 
int ListLength(SLinkList L)
{
 int i = 0,k = L[99].cur;
 while (k)
 {
 k = L[k].cur;
 i++;
 }
 return i;
}
 
void Insert(SLinkList L,int val,int index)
{
 int i = 99,k,n;
 k = Malloc(L);
 if (k)
 {
 L[k].data = val;
 for (n = 1; n < index; n++)
  i = L[i].cur;
 L[k].cur = L[i].cur;
 L[i].cur = k;
 }
}
 
void Traverse(SLinkList L)
{
 int i = L[99].cur;
 while (i)
 {
 printf("%d",L[i].data);
 i = L[i].cur;
 }
}
int main()
{
 SLinkList L;
 Creat(L);
 Insert(L,1,1);
 Traverse(L);
 printf("Please enter the number:\n");
 return 0;
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。