- 1
- 0
- 约1.54千字
- 约 4页
- 2017-08-20 发布于北京
- 举报
单链表的存储结构
typedef struct node{
Elemtype data;
struct node *next;
}lnode, *linklist;
结点类型 指针类型
基本操作的算法实现:
单链表的建立:
带头结点的尾插法:
void creatlistr( linklist *l){
l=(lnode *)malloc(sizeof(lnode));
r=l;
cycle=1; while(cycle){
scanf(x); if(x!=0){
s=(lnode *)malloc(sizeof(lnode));
s-data=x; r-next=s; r=s;}
else cycle=0;}
r-next=Null;}
(2) 带头结点的头插法:
void creatlistl( linklist *l,int n){
l=(lnode *)malloc(sizeof(lnode)); l-next=Null;
for(i=n;i0;--i){
p=(lnode *)malloc(sizeof(lnode));
scanf(p-data);
p-next=l-next;
l-next=p;}
}
取元素
Status getelem( linklist *l, int i, Elemtype *e){
p=l-next; j=1;
while(pji){
p=p-next; ++j;}
if(!p||ji) return 0;
e=p-data;
return e;}
插入操作
Status insert( linklist *l, int i, Elemtype e){
p=l; j=0;
while(pji-1) {p=p-next; ++j;}
if(!p||ji-1) return 0;
s=(lnode *)malloc(sizeof(lnode));
s-data=e; s-next=p-next; p-next=s;}
4. 删除操作
Status delete(linklist *l, int i, Elemtype *e){
p=l; j=0;
while(p-nextji-1){
p=p-next; ++j;}
if(!(p-next)||ji-1) return 0;
q=p-next; p-next=q-next;
e=q-data;
delete q;
return e; }
实例:如何将两个有序链表合并为一个有序链表
算法:
void mergelist( linklist *la, linklist *lb, linklist *lc){
pa=la-next; pb=lb-next; pc=lc=la;
while(papb){
if(pa-data=pb-data){
pc-next=pa; pc=pa; pa=pa-next;}
else {
pc-next=pb; pc=pb; pb=pb-next;}
pc-next=pa?pa:pb;
delete lb;
}
您可能关注的文档
最近下载
- 马科动物运动性骨折的手术治疗与运动康复.docx VIP
- 温州市2026届高三(一模)语文试卷(含官方答案解析).pdf
- 部编版(26春)小学语文一年级下册教学设计全册.docx VIP
- 2023-2024年度广东省职业院校技能大赛药品生产赛项规程 .pdf VIP
- 空中交通管理基础全套教学课件.pptx VIP
- 大酒店承包合同(标准版).doc VIP
- 2024年天津市红桥区中考数学一模试卷(含解析).pdf VIP
- 《船舶电气与自动化(船舶电气)(大管轮)》_船舶电气(大管轮)第六章.pptx VIP
- 《船舶电气与自动化(船舶电气)(大管轮)》_船舶电气(大管轮)第五章.pptx VIP
- T_CCTAS 220-2025 零碳港口评价技术规范.pdf VIP
原创力文档

文档评论(0)