win7管理员权限安装:链表删除偶数结点的程序
来源:百度文库 编辑:神马品牌网 时间:2024/04/29 00:02:19
运行出错,请帮忙找下错误
#include<iostream>
#include<malloc.h>
using namespace std;
typedef struct lnode
{int data;
lnode *next;
}lnode;
typedef struct sqlis
{lnode*l;
int length,sqlistlist;
}sqlist;
void create_list(sqlist&t);
void get_elem(sqlist&t);
void traverse_list(sqlist&t);
void reverse_list(sqlist&t);
void del_elem(sqlist&t);
int main(int argc, char* argv[])
{sqlist t;
create_list(t);
get_elem(t);
traverse_list(t);
reverse_list(t);
del_elem(t);
return 0;
}
//---------------------------------------------------------------------------
void create_list(sqlist&t)
{lnode *p,*q;
if(p=(lnode*)malloc(sizeof(lnode)))
{p->data=0;
p->next=NULL;
t.l=p;
}
else
exit(1);
cout<<"请输入链表中元素的个数:";
cin>>t.sqlistlist;
for(int i=1;i<=t.sqlistlist;i++)
{q=(lnode*)malloc(sizeof(lnode));
cout<<"请输入链表中第"<<i<<"元素:";
cin>>q->data;
cout<<endl;
cout<<q<<endl;
p->next=q;
p=q;
q->next=NULL;
}
}
//----------------------------------------------------------------------------
void get_elem(sqlist&t)
{lnode *q;
int n,m(1);
cout<<"请输入所要查找元素的位置:";
cin>>n;
cout<<endl;
if(n<1||n>t.sqlistlist)
{cout<<"输入的位置不合法!!!"<<endl;
return;
}
q=t.l;
while(q&&m++<n)
q=q->next;
cout<<"查找的元素为:"<<(q->next)->data<<endl;
}
//-------------------------------------------------------------------------------
void traverse_list(sqlist&t)
{lnode *q;
q=(t.l)->next;
int n(1);
while((q!=NULL)&&n++<=t.sqlistlist)
{cout<<"链表中第"<<n<<"元素为:"<<q->data<<endl;
q=q->next;}
}
//-----------------------------------------------------------------------------------
void reverse_list(sqlist&t)
{lnode *q,*n,*m;
q=t.l;
cout<<q;
m=q->next;
//if (m==NULL);
//{cout<<"该链表为空表!!"<<endl;
//cout<< m;
//return;
//}
while(m!=NULL)
{n=m;
m=m->next;
n->next=q->next;
q->next=n;
}
traverse_list(t);
}
//------------------------------------------------------------
void del_elem(sqlist&t)
{lnode *q,*p;
q=t.l;
p=NULL;
if(q->next==NULL)
cout<<"此链表为空!";
else
p=q->next->next;
while(p!=NULL)
{q->next=p->next;
q=p->next;
free(p);
(q!=NULL)?(p=q->next): p=NULL;
}
traverse_list(t);
}
#include<iostream>
#include<malloc.h>
using namespace std;
typedef struct lnode
{int data;
lnode *next;
}lnode;
typedef struct sqlis
{lnode*l;
int length,sqlistlist;
}sqlist;
void create_list(sqlist&t);
void get_elem(sqlist&t);
void traverse_list(sqlist&t);
void reverse_list(sqlist&t);
void del_elem(sqlist&t);
int main(int argc, char* argv[])
{sqlist t;
create_list(t);
get_elem(t);
traverse_list(t);
reverse_list(t);
del_elem(t);
return 0;
}
//---------------------------------------------------------------------------
void create_list(sqlist&t)
{lnode *p,*q;
if(p=(lnode*)malloc(sizeof(lnode)))
{p->data=0;
p->next=NULL;
t.l=p;
}
else
exit(1);
cout<<"请输入链表中元素的个数:";
cin>>t.sqlistlist;
for(int i=1;i<=t.sqlistlist;i++)
{q=(lnode*)malloc(sizeof(lnode));
cout<<"请输入链表中第"<<i<<"元素:";
cin>>q->data;
cout<<endl;
cout<<q<<endl;
p->next=q;
p=q;
q->next=NULL;
}
}
//----------------------------------------------------------------------------
void get_elem(sqlist&t)
{lnode *q;
int n,m(1);
cout<<"请输入所要查找元素的位置:";
cin>>n;
cout<<endl;
if(n<1||n>t.sqlistlist)
{cout<<"输入的位置不合法!!!"<<endl;
return;
}
q=t.l;
while(q&&m++<n)
q=q->next;
cout<<"查找的元素为:"<<(q->next)->data<<endl;
}
//-------------------------------------------------------------------------------
void traverse_list(sqlist&t)
{lnode *q;
q=(t.l)->next;
int n(1);
while((q!=NULL)&&n++<=t.sqlistlist)
{cout<<"链表中第"<<n<<"元素为:"<<q->data<<endl;
q=q->next;}
}
//-----------------------------------------------------------------------------------
void reverse_list(sqlist&t)
{lnode *q,*n,*m;
q=t.l;
cout<<q;
m=q->next;
//if (m==NULL);
//{cout<<"该链表为空表!!"<<endl;
//cout<< m;
//return;
//}
while(m!=NULL)
{n=m;
m=m->next;
n->next=q->next;
q->next=n;
}
traverse_list(t);
}
//------------------------------------------------------------
void del_elem(sqlist&t)
{lnode *q,*p;
q=t.l;
p=NULL;
if(q->next==NULL)
cout<<"此链表为空!";
else
p=q->next->next;
while(p!=NULL)
{q->next=p->next;
q=p->next;
free(p);
(q!=NULL)?(p=q->next): p=NULL;
}
traverse_list(t);
}
链表删除偶数结点的程序
1. 请编写一个算法,删除单链表中值相同的多余结点,使得最后得到的链表中的所有结点的数据域值都不同。
编一程序:①建立一个数据域为1至10的带头结点的链表;
设计产生一个只有两个结点的链表,第一个结点数值是A,第二个结点数值是B,头指针为F
双向循环链表L中,指针p所指结点为最后一个结点的指针是____;指针p所指结点为第一个结点的条件是_____。
单向链表L中,在p所指结点后插入结点s的语句序列是___
在带头结点的单链表中,若被删除结点位置概率相等,则删除第I个结点的时间复杂度是?
对给定的带头结点的单链表L,编写一个删除L中值为X的结点的直接前驱结点的算法
求助!!用后接法建立一个带头结点的单向链表,并就地逆址该带头结点的单向链表。不甚感激!!
请问创建一个空的线性表,链表之类时是不是可以只有一个结点,也可以有多个结点呀?