c語言的資料結構的鍊錶的一些基本操作(一)

2021-10-01 10:36:56 字數 3221 閱讀 6256

鍊錶的一些基本操作

還有一些注釋了(因為我也不知道寫的對不對)

鬼知道我費了多大勁,浪費多大時間在一些小錯誤上

心好累至少能編譯能過了

唉#include

#include

typedef int elemtype;

typedef struct lnodelnode,*linklist;//lnode型別的指標,順序鍊錶

int initlist(linklist &l)

l->next = null; //初始化使第乙個節點指空,即第乙個節點的指標域為空,意思是現在為空表

printf(「初始化成功\n」);

return 0;

}int destorylist(linklist &l)

l->next = null;

printf(「鍊錶已銷毀\n」);

return 0;

}int listlenth(linklist &l)

return n;

}int get_elem(linklist l,int i,elemtype &e)

if(p==null||j>i)

e = p->data;

return e;

}//具體思路就是給個指標一直往後走,位置到了給值,沒到不存在,while迴圈控制 p = p->next;++j;

int locateelem(linklist l,int cur_e)

p=p->next;

}return i;

}void priorelem(linklist l,elemtype cur_e)

// }

// else

// p=q;

// q = p->next;

// }

// printf(「沒有找到當前元素值\n」);

linklist p = l->next,q = p->next;

while(q)

else

q = p->next;

}int nextelem(linklist l,int cur_e, elemtype next_e)

p = p->next;

p = q;

}printf(「沒有找到當前元素值\n」);

}int listinsert(linklist l,int i,elemtype e)

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

s =(linklist)malloc(sizeof(lnode));//要插入就新生成節點,分配記憶體

s->data = e;//新生成的節點的資料域

s->next=p->next;//下面這兩步,意思是有原先在前面的p節點,和新生成的s節點

//p->next指下乙個節點,把下乙個節點放到s的指標域,把第三個節點放到第二個的指標域裡裡

p->next=s;//要把s插入到p的後面 ,p的下乙個指s

printf(「插入成功\n」);

return 0;

}int listdelete(linklist l,int i,elemtype e)//令p指向i-1個節點

if(!(p->next)&&j>i-1)

q=p->next;//q指向第i個節點,p在前,q在後

p->next=q->next;//這兩步等價於p->next = p->next->next,就不要中間變數q了

e = q->data;

free(q);//先改值再釋放空間,先釋放空間會怎麼著呢,改值失敗,後面的沒法移動

printf(「刪除成功\n」);

return e;

}//這不就是很正常的操作嗎,**不對了,把q的下乙個放到p的下乙個裡

//刪最後乙個也沒問題,只是一開始q為空而已

int shuchu(linklist l)

return 0;

}//void shuru(linklist l)

// l->next = null;

// linklist p;

// p=l->next;

// while(p!=null)

////}

//int fanzhuan(linklist l)

//int guibing(linklist l,linklist g)

// for(int i=0;i<=l.length;i++)

// else

// }

// }

//}//int addnodehead(lnode *head, lnode *new_node)

//// node->next = head->next;

// head->next = next;

// return 0;

//}//int revert(lnode *head)

//// lnode *p = head->next;

// head->next= null;

// lnode *temp = null;

// while§

// // return 0;

//}int main()

//歸併 ,不使用原空間

// linklist p,q,r;

// p=l->next;

// q=g->next;

// linklist s;

// s=(linklist)malloc(sizeof(listlength(l)+listlength(g)));

// if(s!=0)

// r=s->next;

// for(int i=0;i<=listlength(l);i++)

// else if(p->data>q->data)

// else

// p=p

// }

// }

//使用舊空間

// linklist p,q,r;

// p=l->next;

// q=g->next;

// l=(linklist)realloc(l,sizeof(linklist)*(listlength(l)+listlength(g)));

// for(int i=0;i<=listlength(l);i++)

// else if(p->data>q->data)

// else

// }

// }

}return 0;

}

資料結構 鍊錶的一些問題

題 1 找到鍊錶的倒數第n個節點 分析 有效方法為使用2個指標node和temp。首先,2個指標都指向表頭結點,僅當temp 沿鍊錶 進行了 n 1 次移動,node開始一起移動,直至temp到達尾節點結束,此時node指標指向的就是倒數第n個節點 public listnode getnodefr...

資料結構 關於順序表 鍊錶的一些事

一 順序表 的儲存單元依次儲存資料元素的線性結構。2.位址連續的空間,一般情況下採用陣列,陣列有靜態陣列和動態陣列 因此,順序表分為靜態順序表 動態順序表 靜態順序表 結構體變數分別為 乙個陣列 有效元素的個數 datatype array max size 儲存資料的空間 int size 1.有...

學習c語言資料結構的一些預備知識

資料結構 筆記 預備知識 一.指標 我們將記憶體中位元組的編號稱為位址 address 或指標 pointer 位址從 0 開始依次增加,對於 32 位環境,程式能夠使用的記憶體為 4gb,最小的位址為 0,最大的位址為 0xffffffff。c語言用變數來儲存資料,用函式來定義一段可以重複使用的 ...