C資料結構 單鏈表操作

2021-06-20 01:00:30 字數 3551 閱讀 4286

單鏈表的一些操作函式(參考自 程杰---《大話資料結構》):

巨集定義:

#define ok 1

#define error 0

typedef int elemtype;

typedef int status;

結構體:(線性單鏈表儲存結構)

typedef struct node

node;

typedef struct node *linklist;

函式宣告部分:

status listinsert(linklist *l,int i,elemtype e);

status createlisthead(linklist *l,int n);

status createlisttail(linklist *l,int n);

status listdelete(linklist *l,int i,elemtype *e);

status getelem(linklist l,int i,elemtype *e);

int locateelem(linklist l,elemtype e);

int listlength(linklist l);

status printlist(linklist l);

bool listisempty(linklist l);

status clearlist(linklist *l);

插入資料:

status listinsert(linklist *l,int i,elemtype e)

if(!p || j>i)

s = (linklist)malloc(sizeof(node));

s->data = e;

s->next = p->next;

p->next = s;

return ok;

}

整表建立,頭插法:

status createlisthead(linklist *l,int n)

}

整表建立,尾插法:

status createlisttail(linklist *l,int n)

r->next = null;

}

查詢元素:

status getelem(linklist l,int i,elemtype *e)

if(!p || j>i)

return error;

*e = p->data;

return ok;

}

查詢元素位置:

int locateelem(linklist l,elemtype e)

return 0;

}

列印鍊錶:

status printlist(linklist l)

return ok;

}

刪除節點位置i的資料,並返回資料e

status listdelete(linklist *l,int i,elemtype *e)

if(!(p->next) || j>i)

return error;

q = p->next;

p->next = q->next;

*e = q->data;

free(q);

return ok;

}

是否為空:

bool listisempty(linklist l)

獲取長度:

int listlength(linklist l)

return j;

}

清空鍊錶:

status clearlist(linklist *l)

(*l)->next = null;

return ok;

}

主函式:(可略過不看)

int main()

else if (i==2)

else if(i==3)

else

break;

case 2:

printf("請輸入要插入資料的 位置 和 值 【以空格間隔】:\n");

scanf("%d",&i);

scanf("%d",&data);

if(listinsert(&l,i,data))

printf("資料【%d】插入成功!\n",data);

else

printf("插入失敗,位置不存在!\n");

break;

case 3:

printf("請輸入要刪除資料的 位置:\n");

scanf("%d",&i);

if(listdelete(&l,i,&e))

else

break;

case 4:

printf("請輸入要查詢資料的值:\n");

scanf("%d",&e);

i = locateelem(l,e);

if(i!=0)

printf("資料%d的當前位置為【%d】\n",e,i);

else

printf("查無此資料!\n");

break;

case 5:

i = listlength(l);

printf("當前鍊錶長度為【%d】\n",i);

break;

case 6:

printlist(l);

break;

case 7:

if (clearlist(&l))

else

break;

}printf("\n");

printf("------------------------\n");

printf("1.建立鍊錶\n");

printf("2.插入資料\n");

printf("3.刪除資料\n");

printf("4.查詢資料位置\n");

printf("5.檢視表長度\n");

printf("6.列印表資料\n");

printf("7.全部清空\n");

printf("0.退出程式\n");

printf("------------------------\n");

scanf("%d",&i);

}system("pause");

return 0;

}

C 資料結構 單鏈表

c 實現 首先,構造乙個單鏈表的節點類 class link 然後是以這個節點類為基礎,建立單鏈錶類 這裡簡單實現了單鏈表的兩個功能新增和輸出 class linklist if head.next null else if head.next null 列印全部資料 public void pri...

c 資料結構單鏈表

鍊錶定義 typedef struct linklistlinklist,linknode linklist 表示頭結點,linknode 表示節點linklist head linknode node 鍊錶初始化 bool linkinit linklist l l next null l dat...

C 資料結構 單鏈表

單鏈表的實現 include using namespace std template typename t struct node template typename t class linklist template typename t linklist linklist template t...