#include #include /*線性表的鏈式儲存結構*/
#define ok 1
#define error -1
typedef int elemtype;
typedef int status;
typedef struct node,*list;
//有哪些操作呢?
status initlist(list l)
//獲取元素
status getelem(list l ,int i,elemtype *e)
if(!p || j>i)
return error;
*e=p->data;
return ok;
}//獲取鍊錶長度
int getlength(list l)
return i;
}status storenode(list *l,elemtype e)
//得新建乙個結點
t=(list)malloc(sizeof(node));
t->data=e;
t->next=null;
p->next=t;
return ok;
}/*插入元素*/
status insertnode(list *l,elemtype e,int i)
//新建乙個結點
list t;
t=(list)malloc(sizeof(node));
t->data=e;
t->next=p->next;
p->next=t;
return ok;
}int main()
else
int n;
printf("輸入要存入的元素個數");
scanf("%d",&n);
int i,temp,e,location;
for(i=0;inext;
while(t)
getelem(l,2,&e);
printf("%d\n",e);
printf("%d\n",getlength(l));
return 0;
}
以上程式整體能夠執行;
但是發現問題
如果沒有如下這段**
t=l->next;
while(t)
會出現異常,直接終止程式;為什麼?單獨呼叫各個函式也會出現問題。
原來是沒有給鍊錶l分配儲存空間;
如果在初始化時改為
status initlist(list *l)
呼叫
initlist(&l)
可以解決此問題。
問題2:
//1. 單鏈表的初始化
status initlist(list *l)
//2. 當鍊表的整表建立,依次從尾部插入結點
status createtaillist(list *l)
//初始化隨機數種子,準備產生隨機數,依賴標頭檔案
srand(time(0));
for(i=0;idata=rand()%100+1;//產生1~100的隨機數
t->next=(*l)->next;//指向l的尾部
(*l)->next=t;
}return ok;
}
createtaillist中呼叫initlist會出現問題
int main()
}return 0;
}
以上**呼叫會出現問題,直接終止程式;
但是如果在createtaillist中登出初始化函式initlist;而在main函式中單獨呼叫initlist後執行createtaillist,又可以正常執行!!
為毛?問題3:
status createheadlist(list *l)
(*l)->next=null;
return ok;
}
執行失敗
但是改為以下**就沒有問題!(只是將*l用p來替換)
status createheadlist(list *l)
p->next=null;
return ok;
}
這又是為什麼?
問題4:
int getlen(list l)
//*len=length;
return length;
}
在main函式中呼叫直接終止程式了!指標啊,指標!!!!!!!!
printf("當前鍊錶長度為:%d\n",getlen(l));
媽蛋,終於發現問題了,原來是在主函式中呼叫函式時出了問題
main中
list l;
initlist(&l);
if(ok==createheadlist(&l))
}printf("當前鍊錶長度為:%d\n",getlen(l));
注意:當我檢視鍊錶各個結點的值時,直接對l進行移動指標操作,l=l->next;當迴圈結束後,l指向的是null,在後面的getlen(l)中,其實是把null傳給了l,當然會出現問題了!
線性表的鏈式儲存結構
線性表的鏈式儲存結構 順序儲存結構不足的解決辦法 缺點 最大的缺點就是插入和刪除時需要移動大量元素。為了表示每個資料元素 ai與其直接後續資料元素 ai 1 之間的邏輯關係,對資料元素 ai來說,除了儲存其本身的資訊之外,還需儲存乙個指示其直接後續的資訊。我們把儲存資料元素資訊的域稱為資料域,把儲存...
線性表的鏈式儲存結構
線性表的鏈式儲存結構,雙向鍊錶實現 package 線性表 public class dulinklist public node t data,node prev,node next 儲存該鍊錶的頭節點 private node header 儲存該鍊錶的尾節點 private node tail...
線性表的鏈式儲存結構
順序儲存結構的缺點 插入和刪除時需要移動大量元素 鏈式儲存結構的特點 用一組任意的儲存單元儲存線性表的資料元素 資料結構 儲存分配方式 時間效能 空間效能 順序儲存結構 用一段連續的儲存單元一次儲存線性表的資料元素 查詢 o 1 插入刪除 o n 需要預分配儲存空間,分大了浪費,分小了易發生上溢 單...