`
touchmm
  • 浏览: 1005375 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

考研复习(2)链表操作

 
阅读更多
1.链表最好采用带头节点的逻辑结构,在删除等操作上比较方便,头节点便是0号节点;
2.在主函数之后定义的函数须在主函数之前申明;
3.要改变链表结构,续传递指向头节点指针的指针;
4.不能直接搬数据结构上的伪代码(严玮文版),还是要自己思考,最好能够画图;
5.调试时出现死循环的话,在终端键入:ps aux
查看死循环进程的pid,然后键入: kill -9 进程的pid 就能终止进程了.
#include<stdio.h>
#include<stdlib.h>
typedef char ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;


}Lnode,*LinkList;
int ListInsert(LinkList *L, int i,ElemType e);//插入元素
int ListDel(LinkList *L, int i);//删除元素
ElemType GetElem(LinkList L,int i);//获得第i个节点
void del(LinkList *L,int mink,int maxk);//删除区间节点
void inverse(LinkList *L);//逆置链表
int main()
{


LinkList Q;
initLink(&Q);
ListInsert(&Q,1,'f');
ListInsert(&Q,1,'e');
ListInsert(&Q,1,'d');
ListInsert(&Q,1,'c');
ListInsert(&Q,1,'a');
display(Q);
del(&Q,98,100);
display(Q);
inverse(&Q);
printf("After invert\n");
display(Q);
ListDel(&Q,1);
display(Q);
printf("The No.2 Element is:%c",GetElem(Q,2));
return 1;
}
void initLink(LinkList *L)//Only transport the address can change the Link
{
*L=(LinkList)malloc(sizeof(Lnode));
(*L)->next=NULL;


}


ElemType GetElem(LinkList L,int i)
{
Lnode *p=L->next;
int j=1;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j>i) return 0;
return p->data;
}


void display(LinkList L)
{
Lnode *p=L->next;
if(p==NULL) printf("No element~\n");
else
{
while(p)
{
printf("%5c->",p->data);
p=p->next;
}
}
printf("\n");
}
int ListInsert(LinkList *L, int i,ElemType e)
{
Lnode *p=*L;//p point to the first node
int j=0;
Lnode *s;
while(p&&j<i-1)//search the No.(i-1) node
{
p=p->next;
j++;


}
if(!p||j>i-1) return 0; //i<1 or >ListLenth+1
s=(LinkList)malloc(sizeof(Lnode));
s->data=e;
s->next=p->next;
p->next=s;
return 1;
}
int ListDel(LinkList *L, int i)
{
Lnode *p=*L;
Lnode *pre=p;
int j=0;
while(p&&j<i)//search the No.i node
{
printf("ALALLA");
pre=p;
p=p->next;
j++;
}
if(!p||j>i) return 0; //i<1 or >ListLenth+1
pre->next=p->next;
}
//delete the element in the sorted linklist that value between mink and maxk


void del(LinkList *L,int mink,int maxk)
{
Lnode *p=*L;
Lnode *pre;
Lnode *q,*s;
while(p&&p->data<mink)
{
pre=p;p=p->next;
printf("address of p:%d",p);
}
if(p)
{while(p&&p->data<maxk) p=p->next;}


pre->next=p;


/*free the memory
q=pre->next;
while(q!=p)
{
s=q->next;free(q);q=s;
}*/
}
//avert a linklist
void inverse(LinkList *L)
{
Lnode *p=*L;
Lnode *s;
p=p->next;//move a element
(*L)->next=NULL;
while(p)
{
//insert at front
s=p->next;
p->next=(*L)->next;
(*L)->next=p;
p=s;


}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics