C语言数据结构之双向循环链表的实例

数据结构之双向循环链表

实例代码:

#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("创建链表失败!\n"); exit(-1);  } pHead->pNext = NULL; pHead->prior = NULL;  PNODE pTail = pHead;  printf("请输入您想要创建链表结点的个数:len = ");  scanf("%d", &length); for(i = 0;i < length;i++){     printf("请输入第%d个结点的值:", i+1);       scanf("%d", &val);    PNODE pnew = (PNODE)malloc(sizeof(NODE)); if(NULL==pHead) { printf("创建链表失败!\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("创建链表失败!\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;              }      } } }

实现效果:

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

快乐时,想想我的影子,我会在云上为你喝彩

C语言数据结构之双向循环链表的实例

相关文章:

你感兴趣的文章:

标签云: