#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode * next;
}LNode,*LinkList;
int InitList(LinkList &L)
{//带头结点的单链表,采用尾插法
int num;ElemType e;
LinkList p,q;
L=(LinkList)malloc(sizeof(LNode));
if(!L) return 0;
L->next=0;
p=L;
printf("input the length:");
scanf("%d",&num);
srand(time(0));
while(num--){
//e=rand()%100;
e=num;
q=(LinkList)malloc(sizeof(LNode));
q->data=e;
p->next=q;
p=q;
}
p->next=0;
}
LinkList GetElem(LinkList L,int i)
{//返回第i个元素的结点指针
if(i<1) return 0;
LinkList p=L;int j=0;
while(p&&j<i){
p=p->next;
j++;
}
return p;
}
int ListInsert(LinkList &L,int i,ElemType e)
{
LinkList p=L,q;
if(i!=1) p=GetElem(L,i-1);//得到i个元素的前驱
if(!p) return 0;
q=(LinkList)malloc(sizeof(LNode));
q->data=e;
q->next=p->next;
p->next=q;
return 1;
}
int ListDelete(LinkList &L,int i,ElemType &e)
{
LinkList p=L,q;
if(i!=1) p=GetElem(L,i-1);//得到i个元素的前驱
if(!p) return 0;
q=p->next;
p->next=q->next;
e=q->data;
free(q);
return 1;
}
void OutputList(LinkList L)
{
LinkList p=L->next;
printf("the list is:");
while(p){
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
LinkList L,p;
ElemType e;
InitList(L);
OutputList(L);
p=GetElem(L,3);
ListInsert(L,4,100);
OutputList(L);
ListDelete(L,4,e);
OutputList(L);
system("pause");
return 0;
}
自己是个菜鸟,如果大家有看到错误的,请帮忙指正一下,真的不胜感激。
单链表
最新推荐文章于 2020-03-19 23:34:36 发布