1樓:娛樂小八卦啊
在函式中不是有q->next=p;這時q是插入前的尾節點。那樣q的的下一個(新插入的節點)就由q指向節點裡的欄位next指向了。
單連結串列的插入只需讓s->next 和p->next的指標做一點改變即可。
s->next = p->next;
p->next = s;
單連結串列第i個資料插入結點的演算法思路是:
1、宣告一個指標p指向連結串列的第一個結點,初始化j從1開始;
2、當j< i 時,遍歷連結串列,讓p的指標向後移動,不斷指向下一結點,j累加1;
3、若到連結串列末尾p為空,說明第i個元素不存在;
4、否則查詢成功,在系統中生成一個空結點s;
5、將資料元素e賦值給s->data;
6、單連結串列的插入標準語句 s->next = p->next; p->next = s;
7、返回成功。
擴充套件資料
單連結串列的建立有頭插法、尾插法兩種方法。
1、頭插法
單連結串列是使用者不斷申請儲存單元和改變連結關係而得到的一種特殊資料結構,將連結串列的左邊稱為鏈頭,右邊稱為鏈尾。頭插法建單連結串列是將連結串列右端看成固定的,連結串列不斷向左延伸而得到的。頭插法最先得到的是尾結點。
連結串列建立的過程是申請空間、得到資料、建立連結的迴圈處理過程。
2、尾插法
若將連結串列的左端固定,連結串列不斷向右延伸,這種建立連結串列的方法稱為尾插法。尾插法建立連結串列時,頭指標固定不動,故必須設立一個搜尋指標,向連結串列右邊延伸,則整個演算法中應設立三個連結串列指標,即頭指標head、搜尋指標p2、申請單元指標pl。尾插法最先得到的是頭結點。
2樓:用梅飛詞
棧是自定義的,看你的棧是怎樣定義的,如果你的棧頂指標指向的是下一個可用的棧空間,那你取棧頂元素的時候就要*(s.top-1);而如果你的棧頂指標指向的是當前可能的空間,取頂就要*(s.top)--
3樓:匿名使用者
是一樣的和命名沒關係,和q->next =p;賦值有關,指標的指向,只是為了更好的理解
c語言資料結構:p->next和p=p->next的區別?
4樓:宿雨厭厭
p 是一個指向某型別結構的指標;
p->next 是 p 所指向的結構的 next 成員;
p = p->next 是把 p->next 的值賦給 p。
如果這兩句語句中的 p 變數是同一個 p 的話,那麼 p->next 的資料型別一定是一個指向結構的指標,而且所指向的結構的型別與 p->next 所在結構的型別相同。
#include
//連結串列的結構及其指標
struct stru_num
*p;int main(void)
(p - 1)->next = null;//末元素指向空指標,//輸入除首元素的其他元素
p = list;
for(index = 0;index < 9;index++)printf("%d",(p[index].next)->num);
return 0;}
5樓:岔路程式緣
這種寫法經常用在連結串列中。
連結串列除了存放必要的資料以外,還要(必不可少的)有存放下一個資料的地址(就是指標),這樣才能形成連結串列。同時我們也把這樣一組由資料和地址組成的內容叫做一個「結點」。
通常讓p作為一個指標,讓它指向一個結點,就可以讀/寫結點的內容,p->next就是專門指向結點末尾那個存放地址的,我們知道這個地址是指向下一個結點的。
p=p->next,就讓p指向了下一個結點的資料。
6樓:灰太狼一拳把自己肚子打扁疼的嗷嗷叫
p->next就是p結點的下一個結點的指標。
p=p->next就是讓p指向p結點的下一個結點。
不懂追問。
資料結構(c語言版)插入元素的指標語句幫我解釋下:s->next=p->next;p->next=s;,最好寫個程式,感謝!!
7樓:最後選手
現將p的下
一個地址給新元素s作為s的下一個地址;再將s的地址作為p的下一專個地屬址。
假設q是p的下一個地址,那麼這條鏈應該是
p->q; 現在要插入顯得地址s,所以要完成的鏈是p->s->q;
但不能直接先將s給p,那樣的話就找不到q了。所以要先s->next=p->next 再p->next=s。
8樓:肚子痛的嘛
給你直觀的一個連結串列:
p->p1->p2 現在我要插s到p的後面第一步:
我吧p的下一個賦給
回s的下一個連結串列就成這樣了答:
s->pi->p2
然後我吧s放到p後面:
p->s->p1->p2
看懂了吧
連結串列的優點就是他不是連續的記憶體段所以插入很簡單 不需要像陣列那樣一個一個移動
但是定址就要慢一點要跳轉
9樓:猥瑣堂
我寫的比較簡單,如果還有不會的,依然可以問我。
#include
#include
#include
typedef struct ln
point;
int main()
printf("\n\n請輸入一個大於1的元素:");
scanf("%d", &a);///比如輸入9p = head, q = head;
while(p)///找到要插入的位置,位置應該在q 和 p中間///while迴圈結束時,q指向的是5,q的next即p指向10r = (point *)malloc(sizeof(point));///新節點
r->data = a;
r->next = null;
r->next = q->next;///新節點r的next指向q的next,即指向data為10的那個節點。其實這裡用p比較容易理解
q->next = r;///然後q的next再指向r。這樣就可以構成一個完整的連結串列
printf("插入後的連結串列為:\n");
p = head;
while(p)}
c語言資料結構中鏈棧的問題,C語言資料結構中鏈棧的問題
這個鏈棧應該bai就是一個du 用連結串列弄的後進先出的 zhi棧結構dao。top指標永遠指向棧的最上面的回那個節點。這個函式是新加一個節點到這個棧中,首先分配了空間給s,s是要新加入這個棧的那個節點。s next top 就是讓s指向棧的最上面的那個元素。top s 因為現在最上面的節點是s了,...
資料結構C語言版迷宮問題,資料結構C語言版迷宮問題
剛學都這樣,想當初我學習的時候連一個單連結串列的逆置,都要理解半天。程式設計就是把實際問題給抽象成數學或非數學模型,結合資料的表示,再找到解決的方法。別忘了,學習資料結構是為了更好的運算元據。思路 首先,迷宮如何用計算機語言表示?一般用二維陣列。0表示牆,1表示路。其次,其次就是如何從迷宮中走出來了...
資料結構c語言描述線性表實驗,資料結構(C語言描述) 線性表實驗
include include define list init size 100 define listincrement 10 typedef structsqlist sqlist sq void initlist sq sqlist sq 初始化列表 void getelem sqlist ...