輸入乙個鍊錶的頭結點,從尾到頭反過來印出來
具體程式:
可以將鍊錶的插入,刪除,移除等程式寫入,標頭檔案。cpp中,然後使用標頭檔案呼叫的方式#include "..\utilistise\list.h"來呼叫即可
由於鍊錶順序 然後反轉的實現是實現後入後出的方式,與棧相同,可以使用stack
宣告: void printlist reversing_iteralively(listnode*phead)
std::stacknodes;
的方式宣告和使用棧
例如:一下是鍊錶的具體使用:
#include #include #define len sizeof(struct student)
/*----------------資料定義----------------------*/
//定義乙個學生資訊的結構體,包括學號,姓名和結構體型別的指標
struct student
;typedef struct student * stunode;
int n=0; //全域性變數,記錄鍊錶的長度
/*---------------函式宣告---------------------*/
stunode create(); //建立乙個新的鍊錶
void print(stunode head); //通過傳入的煉表頭指標列印整個鍊錶
stunode delete(stunode head,int num); //通過傳入的煉表頭指標和學生學號刪除節點
stunode insert(stunode head,stunode newstu); //依照學生學號的順序向鍊錶中插入新元素
/*---------------函式定義----------------------*/
struct student *create()
else
p2=p1;
p1=(struct student *)malloc(len);
printf("請輸入學生的學號和姓名:");
scanf("%ld %s",&p1->num,p1->name);
}//將尾節點的指標置為null
p2->next=null;
return head;
}void print(struct student *head)
else
}}struct student *delete(struct student * head,int num)
//遍歷節點,判斷當前節點是不是需要刪除的節點及是否為尾節點
//如果找到相應節點,或者已經遍歷到尾節點就跳出迴圈
while(p1->num!=num&&p1->next!=null)
//判斷是否找到相應節點
if(p1->num==num)
else
n=n-1;
printf("%ld 節點已刪除.\n",num);
}else
return head;
}struct student *insert(struct student * head,struct student * newstu)
else
//找到乙個比新學號大的節點
if(p0->num <= p1->num)
else
p0->next=p1;
}else
}//鍊錶長度加1
n=n+1;
printf("%ld 插入成功!\n",newstu->num);
return head;
}void main()
printf("請輸入要插入的節點:");
stu=(struct student *)malloc(len);
scanf("%ld %s",&stu->num,stu->name);
while(stu->num!=0)
print(head);
}
演算法 鍊錶 鍊錶分隔(鍊錶劃分)
給定乙個鍊錶和乙個特定值 x,對鍊錶進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。你應當保留兩個分割槽中每個節點的初始相對位置。示例 輸入 head 1 4 3 2 5 2,x 3 輸出 1 2 2 4 3 5 兩個臨時頭結點和尾節點,組成兩個鍊錶,分別存放較小和較大節點 完成後...
PHP鍊錶操作簡單示例
在php中執行資料結構,基本都是用陣列模擬的,只是用一直思想而已。今天遇到的這個問題是,兩個鍊錶進行合併。鍊錶合併效果圖 問題描述 a鍊錶是模版鍊錶,b鍊錶的長度不確定,a,b二個鍊錶結合後形成c鍊錶。說一下程式設計思想 a鍊錶是模版鍊錶所以在運算完成了,長度了唯一不變的。而b鍊錶的長度是不確定的。...
鍊錶演算法之鍊錶分化
對於乙個鍊錶,我們需要用乙個特定閾值完成對它的分化,使得小於等於這個值的結點移到前面,大於該值的結點在後面,同時保證兩類結點內部的位置關係不變。給定乙個鍊錶的頭結點head,同時給定閾值val,請返回乙個鍊錶,使小於等於它的結點在前,大於等於它的在後,保證結點值不重複。測試樣例 3 思路 新建兩個鍊...