鍊錶的一些基本操作
還有一些注釋了(因為我也不知道寫的對不對)
鬼知道我費了多大勁,浪費多大時間在一些小錯誤上
心好累至少能編譯能過了
唉#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語言用變數來儲存資料,用函式來定義一段可以重複使用的 ...