双链表 double_list

.h 文件 double_node.h

//双链表 

#define ElemType int
typedef struct Node * Pnode;//这里要加冒号 

typedef struct Node
{
    int data;
    struct Node *prev;  
    struct Node *next;
} Node,* DoubleList;

//函数声明 
void  print_list(Node *pHead);
DoubleList InitLink();
void CreateList1(Pnode L,ElemType e);  //头插法建立双链表 
void DeleteLink(Pnode L,int i);   //删除操作 
Pnode double_find(Pnode l,  int num);  //查找第I 个结点 传进来头结点 

.c文件

//  双链表 

 #include "double_node.h"
 #include <stdio.h>
 #include <stdlib.h>

 int main()
 {
    int n;
    Node *pHead = NULL, *pFoot;
    printf("双链表测试\n");
    Pnode list=InitLink();   //链表初始化 

    CreateList1(list,56);
    CreateList1(list,46);
    print_list(list);

    DeleteLink(list,2); 

    return 0;
 }


 //双链表初始化
  //初始化链表 
DoubleList InitLink()
{
    Pnode L =(Node *)malloc(sizeof(Node));
    if(L == NULL)  printf("内存分配失败!\n");
    L->next = NULL;
    L->prev =NULL; 
    return L;
}

void CreateList1(Pnode L,ElemType e)  //头插法 
{
     Pnode s;
     Pnode newNode=(Pnode)malloc(sizeof(Node));
     newNode->data=e;
     if(L->next == NULL){
        L->next=newNode;
        newNode->prev =L;
        newNode->next =NULL; 
    } else{
        s=L->next;
        L->next =newNode;
        newNode->prev=L;
         newNode->next =s;
         s->prev=newNode; 
     }

} 

void DeleteLink(Pnode L,int i)  //删除操作 
{
    Pnode s =double_find(L,i);
        Pnode a =s->prev;
    if(s->next==NULL)
    {
        a->next =NULL;
    }else{
       Pnode b =s->next;
       a->next=b;
       b->prev=a;
    }
    free(s); 

    printf("删除操作!\n");
    print_list(L);
} 

void  print_list(Node *pHead){
    Node *p;
    printf("打印链表:\n");
    for(p=pHead->next;p!=NULL;p=p->next)
    {
            printf("%d ",p->data);  
    }
}


Pnode double_find(Pnode l,  int num)//查找第I 个结点 传进来头结点 
{
    Pnode p;
    int i=-1;
    for(p=l;p!=NULL;p=p->next)
    {
        i++;
        if(i == num)
        {
            return p;
            break;
        }
    }
    if(p==NULL)     printf("没有你要找的位置 ");
}
请参考我给出的代码框架,实现对EMPLOYEE结构体为数据的双向链表的排序算法,要求按照按employeeId升序排列 typedef struct linkNode { void* data; //使用空指针使得NODE适配多种数据结构 struct linkNode* preNode; struct linkNode* nextNode; }LINKED_NODE; /*Define the struct of double linked list.*/ typedef struct { LINKED_NODE* head; LINKED_NODE* tail; size_t size; }DOUBLE_LINK_LIST; typedef struct { int employeeId; char name[20]; char ipAddress[30]; char seatNumber[20]; char group[10]; } EMPLOYEE; DOUBLE_LINK_LIST* createDoubleLinkedList() { DOUBLE_LINK_LIST* newList = (DOUBLE_LINK_LIST*)malloc(sizeof(DOUBLE_LINK_LIST)); newList->head = NULL; newList->tail = NULL; newList->size = 0; return newList; } void destroyDoubleLinkedList(DOUBLE_LINK_LIST* list) {} /*Add a new node before the head.*/ void insertHead(DOUBLE_LINK_LIST* list, void* data) // void执政适配其他data类型? {} /*Add a new node after tail.*/ void insertTail(DOUBLE_LINK_LIST* list, void* data) // 如何适配其他data类型? {} /*Insert a new node.*/ void insertNode(DOUBLE_LINK_LIST* list, void* data,int index) // 如何适配其他data类型? {} void deleteHead(DOUBLE_LINK_LIST* list) {} void deleteTail(DOUBLE_LINK_LIST* list) {} void deleteNode(DOUBLE_LINK_LIST* list, int index) {} LINKED_NODE* getNode(DOUBLE_LINK_LIST* list, int index) {} /* 遍历链表,对每个节点执行指定操作*/ void traverseList(DOUBLE_LINK_LIST* list, void (*callback)(void*)) { LINKED_NODE* currentNode = list->head; while (currentNode != NULL) { callback(currentNode->data); currentNode = currentNode->nextNode; } } void printEmployee(void* data) {}
最新发布
07-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值