為了表示每個資料元素ai與其後繼元素之間的邏輯關係,對ai來說,除了儲存其本身資訊外,還需要乙個儲存直接後繼的位置資訊。我們把資料元素資訊的域叫做資料域,把儲存直接後繼位置的域稱為指標域。指標域中儲存的資訊稱為指標或者鏈。這兩部分資訊組成元素ai的儲存映像,稱為結點。
#ifndef s_linklist
#define s_linklist
/*---------linklist storage structure----------------*/
typedef
int elemtype;
typedef
struct node
node;
typedef
struct node * linklist;/*define the linklist*/
/*-----------------init the linklist------------------*/
void initlinklist(linklist *);
/*---------------create the linklist------------------*/
void createlinklist(linklist*);
/*---------------print the linklist-------------------*/
void printlinklist(linklist);
/*---------------clear the linklist-------------------*/
void clearlinklist(linklist);
/*-------------the length of the linklist-------------*/
int linklistlength(linklist);
int isempty(linklist);
elemtype getelem1(linklist,int);
int modify(linklist *,int,elemtype);
int listinsert1(linklist*,int,elemtype);
int listdelete1(linklist*,int,elemtype*);
void reverse(linklist*);
#endif
#include
#include
#include
#include "s_linklist.h"
/*implement*/
void initlinklist(linklist *lp)
void createlinklist(linklist *ph)
r->next=null;//表示當前鍊錶結束
}void printlinklist(linklist ph)
else
printf("\n列印完成!\n");
}}void clearlinklist(linklist *ph)
(*ph)->next=null;
}int linklistlength(linklist ph)
else
length+=1;
}printf("鍊錶長度%d\n", length);
return length;
}int isempty(linklist ph)
else
return status;
}elemtype getelem1(linklist ph,int pos)
if(tmp==null)
while (tmp!=null)
tmp=tmp->next;
}if(indexprintf("超出索引範圍!");
return
0; }
return tmp->data;
}int modify(linklist *ph,int pos,elemtype e)
if(tmp==null)
while(tmp!=null)
tmp=tmp->next;
}if(indexprintf("這個位置不合法!\n");
return
0; }
tmp->data=e;
printf("modify後第%個數修改為%d!\n",index,tmp->data);
return1;}
int listinsert1(linklist *ph,int pos,elemtype e)
if(!p||index>pos)
s=(linklist)malloc(sizeof(node));
s->data=e;
s->next=p->next;
p->next=s;
printf("成功插入元素%d與%位置!\n",s->data,index);
return1;}
int listdelete1(linklist *ph,int pos,elemtype *e)
if(!(p->next)||index>pos)
q=p->next;
p->next=q->next;
*e=q->data;
free(q);
printf("刪除的第%d個結點%d成功!\n",pos,*e);
return1;}
void reverse(linklist *ph)
printf("逆序鍊錶完成!\n");
}
#include
#include
#include "s_linklist.h"
int main()
線性表的鏈式儲存結構(C語言實現)
由於線性表的順序儲存結構在進行插入與刪除是要移動大量的元素,會耗費大量的時間,線性表的鏈式儲存結構就完美的解決了這個問題。首先是單鏈表的建立,有頭插法和尾插法。頭插法 隨機產生n個元素的值,建立帶表頭結點的單鏈線性表l 頭插法 void createlisthead linklist l,int n...
線性表 順序儲存結構 C語言實現
參考 大話資料結構 程杰 部落格 豆瓣 主要包括 列表定義 判斷列表是否為空 初始化列表 列印列表 清空列表 得到第i個位置元素 元素定位 列表第i個元素插入 列表第i個元素刪除 計算列表長度 include include define ok 1 define error 0 define tru...
線性表的順序儲存結構(C語言實現)
最近在研究資料結構,看了好多資料結構方面的書,但好多書都是用的偽 實現,對初學者或者語言功底不深厚的同學來說很不友好,也有好多書說是用c語言實現,但應用了c 的東西,比如c 中的引用,導致 晦澀難懂。學資料結構不能只是看書,一定要將各種結構用 實現,我也將各個部分實現的 貼出來。首先是線性表的順序儲...