数据结构基础3_带头结点的单链表
来源:互联网 发布:佐治亚州知乎 编辑:程序博客网 时间:2024/06/05 04:09
#include<iostream>#include<stdio.h>#include<stdlib.h>typedef int ElemType;typedef int Status;#define true 1#define false 0typedef struct Lnode{ ElemType data; struct Lnode *next; }*link,*Position;typedef struct{ link head,tail; int len; }linklist; Status Makenode(link &p,ElemType e) { p=(link)malloc(sizeof(Lnode)); if(!p) { return false; } p->data=e; return true; } void Freenode(link &p) { free(p); p=NULL; } Status Initlist(linklist &L) { link p; p=(link)malloc(sizeof(Lnode)); if(!p) { return false; } p->next=NULL; L.head=L.tail=p; L.len=0; return true; } Status Clearlist(linklist &L) { link p,q; p=L.head->next; L.head->next=NULL; while(p!=NULL) { q=p->next; free(p); p=q; } L.tail=L.head; L.len=0; return true; } Status Destorylist(linklist &L) { Clearlist(L); free(L.head); L.head=L.tail=NULL; L.len=0; return true; } Status Insfirst(linklist &L,link h,link s) { h=L.head; s->next=h->next; h->next=s; L.len++; return true; } Status Delfirst(linklist &L,link h,link q) { h=L.head; if(h->next==NULL) { return false; } q=h->next; h->next=q->next; free(q); L.len--; return true; } Status Append(linklist &L,link s) { int n=1; link p; p=L.head; while(p->next!=NULL){ p=p->next;} p->next=s; while(s->next!=NULL) { s=s->next; n++; } L.tail=s; L.len+=n; } Status Remove(linklist &L,link &q) { link p; p=L.head; if(L.head==L.tail) { return false; } q=L.head; while(q->next!=NULL){ q=q->next;} while(p->next!=q) { p=p->next; } p->next=q->next; L.tail=p; L.len--; return true; } Status Insbefore(linklist &L,link &p,link s) { link q=L.head; while(q->next!=p) { q=q->next; } s->next=q->next; q->next=s; p=s; L.len++; return true; } Status Insafter(linklist &L,link &p,link s) { s->next=p->next; p->next=s; if(p==L.tail) { L.tail=s; } p=s; L.len++; return true; } Status Setcurelem(link &p,ElemType e) { p->data=e; return true; } ElemType Getcurelem(link p) { return p->data; return true; } Status Listempty(linklist L) { if(L.head->next==NULL) { return true; } else { return false; } } int Listlength(linklist &L) { return L.len; } Position Gethead(linklist L) { return L.head; } Position Getlast(linklist L) { return L.tail; } Position priorpos(linklist L,link p) { link pre=L.head; while(pre->next!=p) { pre=pre->next; } if(L.head==pre) { return NULL; } return pre; } Position Nextpos(linklist L,link p) { /* if(L.tail==p) { return NULL; }*/ return p->next; } Status Locatepos(linklist L,int i,link &p) { if(i<0||i>L.len) { return false; } p=L.head; while(i!=0) { i--; p=p->next; } return 1; } int compare(ElemType e1,ElemType e2) { if(e1>e2) { return 1; } if(e1==e2) { return 0; } else { return -1; } } Position Locateelem(linklist L,ElemType e,Status compare(ElemType,ElemType)) { int j; link p; p=L.head->next; for(int i=0;i<L.len;i++) { if(compare(e,p->data)==0) { return p; } p=p->next; } return NULL; } Status visit(link p) { printf("%d",p->data); } Status Listtraverse(linklist &L,Status visit(link p)) { link p=L.head->next; while(p!=NULL) { visit(p); p=p->next; } return true; } Status Listinsert(linklist &L,int i,ElemType e) { link h,s; if(!Locatepos(L,i-1,h)) { return false; } if(!Makenode(s,e)) { return false; } if(h==L.tail){L.tail=s;} Insfirst(L,h,s); return true; } void mergelist(linklist &La,linklist &Lb,linklist &Lc) { link pa,pb,pc; pa=La.head->next; pb=Lb.head->next; Lc.head=pc=La.head; while(pa && pb) { if(pa->data <= pb->data) { pc->next=pa; pc=pa; pa=pa->next; } else { pc->next=pb; pc=pb; pb=pb->next; } } if(pa==NULL) { pc->next=pb; } else { pc->next=pa; } }
#include<stdio.h>#include<stdlib.h>int main(){ linklist La;Initlist(La);Listinsert(La,1,7);Listinsert(La, 2, 5);Listinsert(La, 3, 2);Listinsert(La, 4, 1);linklist lb; Initlist(lb);Listinsert(lb,1,39);Listinsert(lb,2,19);Listinsert(lb,3,9);Listinsert(lb,4,3);/*link h,q,k; Delfirst(La,h,q); Remove(La,k);*/linklist lc;mergelist(La,lb,lc);Listtraverse(lc,visit);printf("\n");system("pause");}
0 0
- 数据结构基础3_带头结点的单链表
- 数据结构实验3-带头结点的单链表
- 数据结构_不带头结点的链表逆制
- 【数据结构】·【带头结点的单链表】
- java数据结构之带头结点的单链表
- 数据结构——带头结点的单链表
- 《数据结构》带头结点单链表的合并
- 数据结构:不带头结点的单链表
- 带头结点的单链表
- 带头结点的单链表
- 带头结点的单链表
- 数据结构——单链表(带头结点和不带头结点)
- 用C++实现数据结构二 带头结点的单链表
- 数据结构研究--尾插法创建带头结点的单链表
- 数据结构-java与c实现带头结点的单链表
- 数据结构实验2-不带头结点的单链表
- PTA(数据结构)-带头结点的单链表就地逆置
- 带头结点与不带头结点的单链表-LinkList
- virtualenv 隔离gjango开发环境
- web图表库百度开源:ECharts
- Ubuntu下使用Vi时方向键变乱码 退格键不能使用的解决方法
- codeforces #325
- 结构化程序设计和面向对象程序设计的特点及优缺点
- 数据结构基础3_带头结点的单链表
- 黑马程序员———I/O流
- POJ 1384 Piggy-Bank (完全背包)
- 自定义有序广播并接受信息
- [每日一答] [20151013] MySQL中的GROUP_CONCAT()函数详解
- 关于百度地图只显示中间部分,显示不全的原因
- C#生成Code39条形码而非条形码字体的方法
- WebMagic 爬虫框架学习
- 判断NSString中是否包含某个字符