溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言數(shù)據(jù)結(jié)構(gòu)之雙向循環(huán)鏈表的實例

發(fā)布時間:2020-09-14 15:48:03 來源:腳本之家 閱讀:113 作者:lqh 欄目:編程語言

數(shù)據(jù)結(jié)構(gòu)之雙向循環(huán)鏈表

實例代碼:

#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
typedef struct Node{
 
 struct Node *pNext;
 int data;
 struct Node *prior;
} NODE,*PNODE;
PNODE CreatList();
void TreNode(PNODE pHead);
bool isEmpty(PNODE pHead);
int getCount(PNODE pHead);
bool insertNode (PNODE pHead,int pos,int val);
bool detNode (PNODE pHead,int pos,int *pVal);
void sort(PNODE pHead);

int main(){
 int val;
 PNODE pHead = NULL;
 pHead = CreatList();
 TreNode(pHead);
 printf("鏈表不為空!\n");
 printf("鏈表不為空!\n");

 if(insertNode(pHead, 4, 7))
 printf("插入成功!插入的元素為:%d\n", 7);
 else
 printf("插入失敗!\n");
 //重新遍歷鏈表
 TreNode(pHead);
 //刪除元素測試
 if(detNode(pHead, 3, &val))
 printf("元素刪除成功!刪除的元素是:%d\n", val);
 else
 printf("元素刪除失敗!\n");
 TreNode(pHead);


 
 
 return 0 ;
}

PNODE CreatList(){
 
 int i ;
 int val;
 int length;
 
 PNODE pHead = (PNODE)malloc(sizeof(NODE));
 if(NULL==pHead)
 {
 printf("創(chuàng)建鏈表失??!\n");
 exit(-1); 
 }
 pHead->pNext = NULL;
 pHead->prior = NULL;
 
 PNODE pTail = pHead;

 
 printf("請輸入您想要創(chuàng)建鏈表結(jié)點的個數(shù):len = ");
  scanf("%d", &length);

 for(i = 0;i < length;i++){
     printf("請輸入第%d個結(jié)點的值:", i+1);
       scanf("%d", &val);
    PNODE pnew = (PNODE)malloc(sizeof(NODE));
 if(NULL==pHead)
 {
 printf("創(chuàng)建鏈表失??!\n");
 exit(-1); 
 }
 pnew->data = val;
 // pTail->pNext = pnew;
   pTail->pNext = pnew;
   pnew->prior = pTail;
   pnew->pNext = pHead;
    pHead->prior = pnew;
  
 pTail = pnew;
 }

 return pHead; 
}

void TreNode(PNODE pHead){
 
 PNODE p = pHead->pNext;
 
 while(p!= pHead ){
 printf("%d",p->data);
 p = p->pNext;
 }
 
 printf("\n");
 return ;
 
}

bool isEmpty(PNODE pHead){
 
 if(NULL==pHead->pNext)
 return true;
 else
 return false;
}
int getCount(PNODE pHead)
{  
   int i =0 ; 
 PNODE p = pHead->pNext;
 while(NULL != p){
  p = p->pNext;
  i++;
 }
 return i ;
}

bool insertNode (PNODE pHead,int pos,int val){
 
 int i = 0;
// PNODE p = pHead;
PNODE p =pHead; 
 while(NULL !=p && i<pos-1){
 p = p->pNext;
 i++;
 
 }
 if(NULL == p || i>pos-1)
 {
 return false;
 }
   scanf("%d", &val);
  PNODE pNew = (PNODE)malloc(sizeof(NODE));
 if(NULL==pNew)
 {
 printf("創(chuàng)建鏈表失??!\n");
 exit(-1); 
 }
   pNew ->data = val;
   PNODE q = p->pNext;
 
    p->pNext = pNew;
    pNew->prior = p;
   pNew->pNext = q; 
    
 return true;
}
bool detNode (PNODE pHead,int pos,int *pVal){
 
 int i = 0;
// PNODE p = pHead;
PNODE p = pHead;
 
 while(NULL !=p && i<pos-1){
 p = p->pNext;
 i++;
 
 }
 if(NULL == p || i>pos-1)
 {
 return false;
 }
   
  
     *pVal = p->pNext->data;
 
    PNODE q = p->pNext;
    p->pNext = p->pNext->pNext;
    free(q);
    q = NULL;
    
 return true;
}
void sort(PNODE pHead){
 
 int i,j,k,t;
 k = getCount(pHead);
 PNODE p,q;
 for(i = 0,p=pHead->pNext;i < k-1;i++,p = p->pNext)
 {
  for(j = i+1,q = p->pNext;j<k;j++,q = q->pNext){
  
       if(p->data > q->data ){
       
        t = p->data;
        p->data = q->data;
        q->data = t;
       
       } 
  
   }
 }

 
}

實現(xiàn)效果:

C語言數(shù)據(jù)結(jié)構(gòu)之雙向循環(huán)鏈表的實例

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI