本文共 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;iL.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;idata=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;idata=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);
转载地址:http://szzdf.baihongyu.com/