#include
#include
#include
#include
#define len sizeof(struct Node)
using namespace std;
template
struct Node
{
T data;
Node * next ;
};
template
class linklist
{
public : Node* head ; linklist();//空参数的构造函数 linklist( int n );//n个结点的构造函数 int listlength(Node *head );//求出单链表的长度 T get(int pos);//输出位置pos下的值(data int locate(T item);//寻找item 输出其所在的位置 void printlinklist();//输出整个单链表 void insert(int i ,T item);//插入 T Delete(int i );//删除 ~linklist();//析构
};
template
T linklist::Delete(int i )
{
while(i<=0||i>this->listlength(this->head))
{
cout<<“输入非法请重新输入”<
}
Node * p = new Node;
p=this->head;
T j=p->data;
if (1==i)
{
this->head =p->next;
}
else {
for(int k = 1; k
p=p->next;
}
j = p->next->data;
p->next = p->next->next;
}
cout<<“你删除的元素为:” <
}
template
void linklist :: insert(int i ,T item)
{ Node *p= new Node;
Node *s= new Node;
s->data=item;
p=this->head;
if(i>this->listlength(this->head)+1)
return ;
else
{
if(1==i)
{
s->next=p;
this->head=s;
}
else
{
for(int j = 1 ; j < i-1 ; j++)
{
p=p->next;
}
s->next=p->next;
p->next=s;
}
}
}
template
int linklist::locate(T item)
{
int n = this->listlength(this->head);
Node *p= new Node;
p=this->head;
for(int i = 1; i <= n;i++)
{
if(p->dataitem)
return i;
else
p=p->next;
if(p->nextNULL)
return -1;
}
}
template
T linklist::get(int pos)
{
if(pos >this->listlength(this->head) ||pos<=0)
{
cout<<“输入的位置非法”<
else
{
Node *a =new Node;
a=this->head;
int i = 1;
while(inext;
i++;
}
return a->data;
}
}
template
int linklist::listlength(Node *head)
{ int i = 0;
Node *temp= new Node;
temp=head;
do{
temp=temp->next;
i++;
}while(temp->next!=NULL);
return i;
}
template
linklist ::~linklist()
{
}
template
void linklist::printlinklist()
{
Node *p;
p=this->head;
int i = 1;
do{
cout<<“第”< cout p=p->next;
i++;
} while(p->next!=NULL);
}
template
linklist::linklist()
{
head->next =NULL;
}
template
linklist::linklist( int n )
{ Node *temp;
temp = head = new Node; for(int i = 0 ; i >j; temp->data=j; Node *p; p=new Node ; temp->next =p; temp=p; } temp->next=NULL;
}
int main()
{ linklist a (4);
a.printlinklist();
cout<<“单链表的长度为:” < cout<<“请输入1到”< int i ;
cin>>i;
cout<<“单链表第”< cin>>i;
int x = a.locate(i);
if(-1==x)
cout<<“链表中没有这个数据”<
cout<<“该数据在链表的位置为:”<
cout<<“请输入要插入的值”<
cin>>j;
a.insert(i,j);
a.printlinklist();
cout<<“请输入想要删除的第x个单链表的值,且其范围不能超过:”< cin>>i;
a.Delete(i);
a.printlinklist();
return 0;
}
#include
#include
#include
typedef struct dunode
{
int data;
struct dunode* prior;
struct dunode* next;
} DulinkList;
DulinkList* MakeEmpty()
{
DulinkList* PtrL;
PtrL = (DulinkList*)malloc(sizeof(DulinkList));
PtrL->prior = PtrL->next = PtrL;
return PtrL;
}
void Creatlink(DulinkListL)
{
int num,data;
DulinkListp,s;
p = L;
printf(“请输入建立链表的元素个数:”);
scanf_s("%d", &num);
for (int i = 1; i <= num; i++)
{
s = (DulinkList)malloc(sizeof(DulinkList));
printf(“请输入第%d个数:”, i);
scanf_s("%d", &s->data);
s->prior = p->prior;
p->prior->next = s;
s->next = NULL;
p->prior = s;
}
}
void Insetlink(DulinkList* L)
{
int data;
DulinkList* s,p;
p = L;
printf(“请输入插入的元素:”);
scanf_s("%d", &data);
s = (DulinkList)malloc(sizeof(DulinkList));
s->data = data;
s->prior = p->prior;
p->prior->next = s;
p->prior = s;
s->next = NULL;
}
void Deletelink(DulinkList* L)
{
int data;
DulinkList* s, * p;
p = L->next;
printf(“请输入删除的数据:”);
scanf_s("%d", &data);
while (p != NULL && p->data != data)
p = p->next;
if (p != NULL)
{
if (p->next != NULL)
{
p->next->prior = p->prior;
p->prior->next = p->next;
free§;
printf("%d已删除!n", data);
}
else {
p->prior->next = NULL;
free§;
printf("%d已删除!n", data);
}
}
else printf("%d不存在!n",data);
}
void Displaylink1(DulinkList* L)
{
DulinkList* p, * s;
p = L->next;
while (p != NULL)
{
printf("%5d", p->data);
p = p->next;
}
printf("n");
}
void Menu()
{
printf("n-----------操作指南-----------nn");
printf(" 1.建立单链表n");
printf(" 2.插入数据元素n");
printf(" 3.删除数据元素n");
printf(" 4.链表输出n");
printf(" 0.退出n");
printf("n------------------------------nn");
}
int main()
{
DulinkList* PtrL= MakeEmpty();
int choice;
while (1) {
Menu();
printf(“请输入您的选择:”);
scanf_s("%d", &choice);
switch (choice) {
case 1:Creatlink(PtrL); break;
case 2:Insetlink(PtrL); break;
case 3:Deletelink(PtrL); break;
case 4:Displaylink1(PtrL); break;
case 0:exit(0);
default:break;
}
}
system(“pause”);
return 0;
}



