数据结构—单链表的建立及使用

#include<iostream.h>
#include<malloc.h>
typedef int elemtype;


typedef struct Lnode
{//创建一个自定义类型为Lnode的单链表
	elemtype data;
	struct Lnode *next;//结构体指针指向后继结点的地址
}Lnode,*Linklist;


Linklist Create()
{//创建并初始化单链表(前插法)
	Linklist L;
	L=(Linklist)malloc(sizeof(Lnode));
	L->next=NULL;//创建一个头结点并指向NULL


	int x;

	cin>>x;
	while(x!=9999)//输入9999将停止输入单链表的数值
	{
		Linklist p;
		p=(Linklist)malloc(sizeof(Lnode));//创建一个新的结点p,存放新的值


		p->data=x;
		p->next=L->next;//将新结点指向上一个结点
		L->next=p;//将头指针指向刚开辟的结点
		cin>>x;
	}
	return L;
}


void Print(Linklist L)
{//打印出这个单链表
	Linklist q;
	q=L->next;//创建一个新的结点q,用于遍历单链表


	while(q!=NULL)
	{
		cout<<q->data<<" ";
		q=q->next;
	}//依次输出q.data的值,并使q指向下一个结点

	cout<<endl;
}


void Find(Linklist L,int i)
{//查找第i个结点,并输出节点元素的值
	Linklist q;
	q=L->next;//创建一个新的结点q,用于指向单链表中的某一结点

	int j=1;//j用于计数

	while((q!=NULL)&&(j<i))
	{
		q=q->next;
		j++;//q指向下一个结点,j+1
	}
	cout<<"第"<<i<<"个结点的值:"<<q->data<<endl;
}


Linklist Delete(Linklist L,int i)
{//删除第i个结点
	Linklist q;
	q=L;//创建一个新的结点q,用于指向单链表中的某一结点


	int j=1;//用于计数
	
	while((q!=NULL)&&(j<i))
	{
		q=q->next;
		j++;
	}//q指向第i个结点的前驱结点,j+1

	Linklist temp;
	temp=q->next;//用temp指针暂存第i结点,用来最后释放


	q->next=temp->next;//前驱结点连上后继结点
	delete temp;//释放第i个结点

	return L;
}
Linklist Insert(Linklist L,int i,int e)
{//在第i个元素前插入一个新的结点,结点元素值为e
	Linklist q;
	q=L;//创建一个新的结点q,用于指向单链表中的某一结点

    Linklist s;
	s=(Linklist)malloc(sizeof(Lnode));
	s->data=e;//新建一个结点,并把e放在s.data中

	int j=1;//用于计数
	
	while((q!=NULL)&&(j<i))
	{
		q=q->next;
		j++;
	}//q指向第i个结点的前驱结点,j+1

	s->next=q->next;
	q->next=s;//将s结点连上单链表

	return L;
}
void main()
{
	Linklist L;

	char choise;
	cout<<"请输入单链表的各个数值:(若输入9999则结束)"<<endl;
	L=Create();
	Print(L);
	cout<<"字母A表示查找第i个结点,并输出节点元素的值"<<endl;
	cout<<"字母B表示删除第i个结点"<<endl;
	cout<<"字母C表示在第i个元素前插入一个新的结点,结点元素值为e"<<endl;
	cout<<"请输入字母:";
	cin>>choise;
	cout<<endl;
	switch(choise)
	{
		case'A':
			{
				int i;
				cout<<"请输入i:"<<' ';
				cin>>i;
				Find(L,i);
				break;
			}
		case'B':
			{
				int j;
				cout<<"请输入i:"<<' ';
				cin>>j;
				L=Delete(L,j);
				Print(L);
				break;
			}
		case'C':
			{
				int z,e;
				cout<<"请输入i和e:"<<' ';
				cin>>z>>e;
				L=Insert(L,z,e);
				Print(L);
				break;
			}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_41596915/article/details/82854037