c语言双链表实现
#include <stdio.h> #include <stdlib.h> #define OK 1; #define ERROR -1; typedef int Status; typedef int ElemType; typedef struct DuLnode{ ElemType data; DuLnode *next,*prior; }DuLnode,*DuLinkNode; Status InitDuLnode(DuLinkNode &L){ L = (DuLinkNode)malloc(sizeof(DuLnode)); L->next = NULL; L->prior = NULL; printf("init success \n"); return OK; } //创建双链表补充数据 Status CreateDuLinkNode(DuLinkNode &L){ DuLinkNode p,q; p = L; for (int i=0;i<10;i++){ q = (DuLinkNode)malloc(sizeof(DuLnode)); q -> data = i; q -> prior = p; q -> next = NULL; p -> next = q; p = p ->next; } return OK; } //查找元素返回指针 DuLinkNode GetElemByIndex(DuLinkNode &L,int i){ DuLinkNode p; p = L; for (int j=0;j<i;j++){ p = p->next; } printf("data is %d\n",p->data); return p; } int GetElem(DuLinkNode L){ DuLinkNode p; p = L; while(p->next){ p = p->next; printf("%d\n",p->data); } return 0; } //插入结点 Status InsertDuLinkNode(DuLinkNode L, int i, ElemType e){ DuLinkNode p,q; p = GetElemByIndex(L,i); q = (DuLinkNode)malloc(sizeof(DuLnode)); if(q){ q->data = e ; q->prior = p->prior; p->prior->next = q; q->next = p; p->prior = q; return OK; } return ERROR; } //删除结点 Status DeleteDuLinkNode(DuLinkNode L, int i){ DuLinkNode p,q,r; p = GetElemByIndex(L,i); if(p){ r = p->next; q = p->prior; r->prior = q; q->next = r; free(p); return OK; } return ERROR; } int main(){ DuLinkNode L; InitDuLnode(L); CreateDuLinkNode(L); InsertDuLinkNode(L,3,33); DeleteDuLinkNode(L,1); DeleteDuLinkNode(L,5); GetElem(L); GetElemByIndex(L,1); return 0; }