2019.04.09打卡
阿新 • • 發佈:2019-04-10
當前 width 刪除表 -a res null alloc spa 函數
單鏈表的刪除和尾插法創建部分
1 int Remove(LinkList &first,int i,DataType &x){ 2 LinkNode *p=Locate(first,i-1); //定位於第i-1個結點 3 if(p==NULL||p->next==NULL) 4 return 0; 5 LinkNode *q=p->next; //用q保存被刪除結點的地址 6 p->next=q->next; //重新拉鏈,將被刪除結點從鏈中取下7 x=q->data; //取出被刪除結點中的數據,釋放結點 8 free(q); 9 return 1; 10 } 11 //刪除表中第i個元素,通過引用型參數x返回該元素的值
1 //尾插法創建單鏈表 2 #include "LinkList.h" 3 void createListRear (LinkList &last,DataType endtag){ //endtag是結尾 4 DataType val;5 scanf("%d",&val); 6 if(val==endtag) 7 last==NULL; 8 else{ 9 last=(LinkNode *)malloc(sizeof(LinkList)); //創建新結點 10 if(!last){ 11 printf("存儲分配錯誤!\n"); 12 exit(1); 13 } 14 last->data=val; 15 createListRear(last->next,endtag); //遞歸創建後續鏈表 16 } 17 } 18 void main(void){ 19 LinkList L; 20 DataType endtag; 21 scanf("%d",&endtag); //輸入約定的輸入結束標誌 22 L=(LinkNode *)malloc(sizeof(LinkList)); 23 if(!L){ 24 printf("存儲分配錯誤!\n"); 25 exit(1); 26 } 27 LinkNode *rear=L; //尾指針,初始時指向頭結點 28 createListRear(rear->next,endtag); //遞歸建立單鏈表 29 printList(L->next); //調用了printList函數; 30 }
今日小結:p++與p->next 的區別
“假如你處理的是數組,那麽p指向當前的數組值,p++就是指向下一個數組值,因為數組的數值在內存裏面是排列在一起的,(p++主要用於連續的空間)
但是假如使用的是鏈表,那麽鏈表節點他們的內存位置不是排列在一塊的,鏈表節點之間的關系的唯一紐帶只有指針,就是p->next指向下一個,
所以p->next與p++不是等價的”
參考鏈接:
(https://zhidao.baidu.com/question/1576095080104499180.html)(https://blog.csdn.net/dongyanxia1000/article/details/51979931)
2019.04.09打卡