300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 双向链表基本操作(C语言)

双向链表基本操作(C语言)

时间:2020-03-20 00:44:40

相关推荐

双向链表基本操作(C语言)

#include <stdio.h>#include <stdlib.h>#include<stdbool.h>//双向链表typedef int Elemtype;typedef struct DNode{Elemtype data;struct DNode *prior,*next;} DNode,*DLinkList;//尾插法创建链表DLinkList CreateList(){int x;DLinkList head=(DLinkList)malloc(sizeof(DLinkList));//创建双向链表,头节点DNode* p=head,*s;//p为遍历节点,s为当前节点p->prior=NULL;printf("创建链表,输入9999表示结束\n");scanf("%d",&x);while(x!=9999){s=(DNode*)malloc(sizeof(DNode*));s->data=x;s->prior=p;p->next=s;p=s;scanf("%d",&x);}s->next=NULL;//不要忘记制空尾指针return head;//返回头节点}//遍历链表void PrintList(DLinkList L){DNode *p;p=L->next;//找到头节点下一个节点printf("链表元素如下:\n");while(p){printf("%d<---->",p->data);p=p->next;}printf("\n");}//双链表头插法DLinkList InsertListHead(DLinkList L,Elemtype e){DNode *p=(DNode*)malloc(sizeof(DNode*));p->data=e;p->prior==L;p->next=L->next;if(p->next!=NULL){L->next->prior=p;}L->next=p;return L;}//队尾插入DLinkList InsertListTail(DLinkList L,Elemtype e){DNode *s=(DNode*)malloc(sizeof(DNode*));//s为待插入节点DNode *p=L->next;//p为遍历节点while(p->next){p=p->next;}p->next=s;s->data=e;s->prior=p;s->next=NULL;return L;}//获取链表长度int GetLength(DLinkList L){int len=0;DNode *r=(DNode*)malloc(sizeof(DNode*));r=L->next;while(r){r=r->next;len++;}return len;}//在指定位置插入节点bool InsertPosition(DLinkList L,int pos,Elemtype e){if(pos<1||pos>GetLength(L)+1)return false;DNode *r,*n;//r遍历节点n=(DNode*)malloc(sizeof(DNode*));//插入节点n->data=e;n->next=NULL;r=L;while(--pos>0){r=r->next;}if(r->next==NULL) //在结尾插入{r->next=n;n->prior=r;return true;}n->next=r->next;r->next->prior=n;r->next=n;n->prior=r;return true;}//删除指定节点元素bool DeletePosition(DLinkList L,int pos,Elemtype *e){if(pos<1||pos>GetLength(L))return false;DNode *r=L,*p;//r遍历节点,p为待删除节点while(--pos){r=r->next;}p=r->next;*e=p->data;if(p->next==NULL){r->next=NULL;free(p);return true;}r->next=p->next;p->next->prior=r;free(p);return true;}int main(){DLinkList L=CreateList();PrintList(L);printf("头插入节点\n");InsertListHead(L,-1);PrintList(L);printf("尾插法插入节点\n");InsertListTail(L,-1);PrintList(L);printf("链表长度 %d\n",GetLength(L));printf("在指定位置插入元素\n");InsertPosition(L,5,-99);PrintList(L);printf("删除指定位置元素\n");int *e;DeletePosition(L,5,e);printf("删除元素为:%d\n",*e);PrintList(L);return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。