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语言数据结构之双向循环链表的实例 的全部内容, 来源链接: utcz.com/z/324820.html

回到顶部