指针在参数传递与链表中的应用
答案:2 悬赏:10
解决时间 2021-03-13 10:25
- 提问者网友:绿海猖狂
- 2021-03-12 10:44
指针在参数传递与链表中的应用
最佳答案
- 二级知识专家网友:统治我的世界
- 2021-03-12 11:14
链表操作,测试下 通过 指向结点的指针以及 指向结点指针的指针 完成 链表操作。
//链表的实现
#include
#include
#define ElemType int
#define LIST_INIT_SIZE 20
#define OK 1
#define ERROR 0
typedef struct Node{
int data;
struct Node *next;
}Node, *LinkList;
int CreateList(LinkList *list, int n);
int InsertList(LinkList list, int pos, int n);
int DelList(LinkList *list, int pos, int *n);
int MergeList(LinkList *des_list, LinkList *src_list);//将src_list合并至des_list中,两列表有序 从小到大排列
int ListTraverse(LinkList list); //可传指针,减少复制
int ListLength(LinkList list);
int DestroyList(LinkList *list);//摧毁链表,表头+结点
int ClearList(LinkList *list);//置为空表
int InsertList_p(LinkList *list, int pos, int n);
int LocatePos(LinkList list, int i, LinkList *des);//用des指向list中第i个结点
int MakeNode(LinkList *node, ElemType e);//
int InsFirst(LinkList *list, LinkList p);
int DelFirst(LinkList list, LinkList p);
//链表的实现
#include
#include
#define ElemType int
#define LIST_INIT_SIZE 20
#define OK 1
#define ERROR 0
typedef struct Node{
int data;
struct Node *next;
}Node, *LinkList;
int CreateList(LinkList *list, int n);
int InsertList(LinkList list, int pos, int n);
int DelList(LinkList *list, int pos, int *n);
int MergeList(LinkList *des_list, LinkList *src_list);//将src_list合并至des_list中,两列表有序 从小到大排列
int ListTraverse(LinkList list); //可传指针,减少复制
int ListLength(LinkList list);
int DestroyList(LinkList *list);//摧毁链表,表头+结点
int ClearList(LinkList *list);//置为空表
int InsertList_p(LinkList *list, int pos, int n);
int LocatePos(LinkList list, int i, LinkList *des);//用des指向list中第i个结点
int MakeNode(LinkList *node, ElemType e);//
int InsFirst(LinkList *list, LinkList p);
int DelFirst(LinkList list, LinkList p);
全部回答
- 1楼网友:厭世為王
- 2021-03-12 11:45
c语言方法,若求其余语言请把分给满足你需求的那个吧
设链表结点结构
typedef struct node{
datatype data;
struct node *next; //下一个结点
struct node *prev; //上一个结点
}node;
若head为头结点指针
则
node *p1,*p2;
p1 = head->next; //p1为第一个结点
p2 = p1->next; //p2为第二个结点
p2->next->prev = p1; //第二个结点的后继(第三个结点)的前驱为第一个结点
p1->next = p2->next; //第一个结点的后继为第二个结点的后继(第三个结点)
p1->prev = p2; //第一个结点的前驱为第二个结点
p2->next = p1; //第二个结点的后继为第一个结点
p2->prev = head; //第二个结点的前驱为头结点
head->next = p2; //头结点的后继为第二个结点
完毕 ,以上是用两个临时指针的方法,更自由,下面是一个临时指针的方法
node *p;
p = head->next; //p为第一个结点
p->next->next->prev = p; //第三个结点的前驱为第一个结点
p->next->prev = head; //第二个结点的前驱为头结点
p->prev = p->next; //第一个结点的前驱为第二个结点
head->next = p->next; //头结点的后继为第二个结点 ---×
p->next = p->next->next; //第一个结点的后继为第三个结点
head->next->next = p; //第二个结点(×行中以转为头结点的后继)的后继为第一个结点
完毕
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯