线性链表的实现插入和删除

#include
#include
#include
using namespace std;
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ERROR 0
#define OK 1
typedef struct LNode
{
 int data;
    struct LNode *next;
}LNode,*LinkList;
void CreatList_L(LinkList &L,int n)
{
 LinkList p;
 L=(LinkList)malloc(sizeof(LNode));//cout<<"***************************8";
 L->next=NULL;
 for(int i=n;i>0;--i)
 {
  p=(LinkList)malloc(sizeof(LNode)); 
     scanf("%d",&p->data);
     p->next=L->next;
     L->next=p;
 }
}
int ListInsert_L(LinkList &L,int i,double e)
{
 LinkList p,s;
 int j=0;
 p=L; 
 while(p&&j
 {
  p=p->next;
  ++j;
 }
 if(!p||j>i-1)
  return ERROR;
 s=(LinkList)malloc(sizeof(LNode));
 s->data=e;
 s->next=p->next;
 p->next=s;
 return OK;
}
int ListDelete_L(LinkList &L,int i,int &e)
{
 LinkList p=L,q;
 int j=0;
 while(p->next&&j
 {
  p=p->next;
  ++j;
 }
   if(!p->data||j>i-1)
    return ERROR;
   q=p->next;
   p->next=q->next;
   e=q->data;
   free(q);
   return OK;
}
void output(LinkList L)
{
// L=L->next;
   while(L->next!=NULL)
   { 
    L=L->next;
    cout<<L->data<<"  ";   
   }
}
int main()
{
 LinkList L;
 int i,j,r;
 int m,n;
 cout<<"请输入想要创建链表的长度:";cin>>r;
 CreatList_L(L,r);
 output(L);
 cout<<endl<<"请输入想要插入的元素以及想要插入的位置:"<<endl;
 cin>>m>>i;
 ListInsert_L(L,i,m);
 output(L);
 cout<<endl<<"请输入想要删除的位置:"<<endl;
 cin>>j;
 ListDelete_L(L,j,n);
 output(L);
 cout<<endl;
 return 0;
}

 

 

 

posted on 2012-12-07 23:07  木本  阅读(321)  评论(0编辑  收藏  举报

导航