篇章二线性表---基础知识
发布日期:2021-06-29 15:42:32 浏览次数:2 分类:技术文章

本文共 2377 字,大约阅读时间需要 7 分钟。

1.顺序表的结构体定义

//顺序表 typedef struct{	int data[maxsize];	int length;}SqList;//单链表typedef struct{	int data;	struct LNode *next;}LNode;//双链表typedef struct DLNode{	int data;	struct DLNode *prior;	struct DLNode *next;}DLNode;

2.顺序表常见操作

//按元素值查找算法int findElem(SQList L,int e){	int i;	for(i=0;i
L.length||L.length==maxsize) return 0; for(i=L.length-1;i>=p;i--) L.data[i+1]=L.data[i]; L.data[p]=e; ++(L.length); return 1;} //删除元素int deleteElem(SqList &L,int p,int &e){ int i; if(p<0||p>L.length-1) return 0; e=L.data[p]; for(i=p;i

3.单链表的操作

//尾插法建表void createListR(LNode &L,int a[],int n){	LNode *s,*r;	int i;	C=(LNode*)malloc(sizeof(LNode));	C->next=NULL;	r=C;	for(i=0;i
data=a[i]; r->next=s; r=r->next; } r->next=NULL;}//尾插法建表void createList(LNode *&C,int a[],int n){ LNode *s; int i; C=(LNode*)malloc(sizeof(LNode)); C->next=NULL; for(int i=0;i
data=a[i]; s->next=C->next; C->next=s; }} //A,B两个单链表递增有序,将A和B归并成非递减有序C void merge(LNode *A,LNode *B,LNode *&C){ LNode *p=A->next;LNode *q=B->next; LNode *r; c=A;c->next=NULL;free(B); r=C; while(p!=NULL&&q!=NULL) { if(p->data<=q->data) { r->next=p;p=p->next;r=r->next; } else { r->next=q;q=q->next;r=r->next; } } if(p!=NULL) r->next=p; if(q!=NULL) r->next=q;} //A,B两个单链表递增有序,将A和B归并成非递增有序C void merge(LNode *A,LNode *B,LNode *&C){ LNode *p=A->next;LNode *q=B->next; LNode *s; c=A;c->next=NULL;free(B); while(p!=NULL&&q!=NULL) { if(p->data<=q->data) { s=p;p=p->next;s->next=c->next;c->next=s; } else { s=q;q=q->next;s->next=c->next;c->next=s; } } while(p!=NULL) { s=p;p=p->next;s->next=c->next;c->next=s; } while(q!=NULL) { s=q;q=q->next;s->next=c->next;c->next=s; }}//查找链表C中值为x的结点,若存在,则删除int findAndDelete(LNode *C,int x){ LNode *p,*q; LNode *pre; p=c->next;pre=C; while(p!=NULL) { if(p->data==x) { pre=p; break; } p=p->next; } if(p==NULL) return 0; else { pre->next=p->next; free(p); }}

4.双链表的操作

//采用尾插法void createDistR(DLNode *&L,int a[],int n){	DLNode *s,*r;	int i;	L=(DLNode *)malloc(sizeof(DLNode));	L->prior=NULL;L->next=NULL;	r=L;	for(i=0;i
data=a[i]; r->next=s; s->prior=r; r=s; } r->next=NULL;}//查找结点DLNode *findNode(DLNode *C,int x){ DLNode *p=C->next; while(p!=NULL) { if(p-?data==x) break; p=p->next; } return p;} //插入结点 s->next=p->next; s->prior=p; p->next=s; s->next->prior=s;//删除结点 q=p->next; p->next=q->next; q->next->prior=p; free(q);

 

转载地址:https://codingchaozhang.blog.csdn.net/article/details/85228418 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:篇章二线性表---常见操作
下一篇:数据结构----绪论

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月14日 23时40分42秒