⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 线形链表.cpp

📁 this a map to you updata myself
💻 CPP
字号:
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE  100      //线性表可能达到的最大长度
#define ERROR 0
#define OK 1
	 
typedef struct Node  /* 结点类型定义 */
{
	int	data;
	struct Node *next;
}Node, *LinkList;/* LinkList为结构指针类型*/

LinkList CreateFromHead();
LinkList CreateFromTail();
Node *Get (LinkList L, int i);
int InsList(LinkList L, int i, int e);
int DelList(LinkList L,int i, int *e);

int len;
LinkList pre;

void main()
{
	int c, i, j , flag, *b, aa;
	b=&aa;
	LinkList S;
	Node *q;

	do{	
		printf("头插法创建线性表请按1\n");
		printf("尾插法创建线性表请按2\n");
		printf("查找第i个结点请按3\n");
		printf("插入元素请按4\n");	
		printf("删除元素请按5\n");
		printf("退出请按6\n");
		scanf("%d",&c);
		switch(c)
		{
			case 1:S=CreateFromHead();
					 printf("头插法创建线性表已经完成,创建的线性表为:\n");
					 while(S->next!=NULL)
					 {
						printf("%d ",S->next->data);
						S = S->next;
					 }
					 printf("\n");
					 break;
			
			case 2:S=CreateFromTail();
					 printf("尾插法创建线性表已经完成,创建的线性表为:\n");
					 while(S->next!=NULL)
					 {
						printf("%d ",S->next->data);
						S = S->next;
					 }
					 printf("\n");
					 break;
			case 3: S=CreateFromHead();
					 printf("头插法创建线性表已经完成,创建的线性表为:\n");
					 while(S->next!=NULL)
					 {
						printf("%d ",S->next->data);
						S = S->next;
					 }
					 printf("\n");
					printf("输入要查找的是第几个结点:");
					scanf("%d",&i);
					q=Get (S, i);
					printf("查找到的元素是:%d",q->data);
					break;

			case 4:	S=CreateFromHead();
					 printf("头插法创建线性表已经完成,创建的线性表为:\n");
					 while(S->next!=NULL)
					 {
						printf("%d ",S->next->data);
						S = S->next;
					 }
					 printf("\n");
					 printf("输入要插入的是第几个结点:");
					scanf("%d",&i);
					printf("输入要插入的元素:");
					scanf("%c",&j);
					InsList(S,i,j);
					printf("插入后的链表为:");
					while(S->next!=NULL)
					 {
						printf("%d ",S->next->data);
						S = S->next;
					 }
					 printf("\n");
					 break;
			case 5: S=CreateFromHead();
					 printf("头插法创建线性表已经完成,创建的线性表为:\n");
					 while(S->next!=NULL)
					 {
						printf("%d ",S->next->data);
						S = S->next;
					 }
					 printf("\n");
					 printf("输入要删除的是第几个结点:");
					scanf("%d",&i);
					flag=DelList(S,i, &j);
					if(flag)
					{
						aa=j;
						printf("删除的元素是:%d",b);
					}
						break;
					
			default:	break;
			
		}
	printf("\n");
	}while(c!=5); 	
	printf("*\n");
}

LinkList CreateFromHead()
{             
	LinkList   L;
	Node *s;
	int a,i;
	int flag=1;
	/* 设置一个标志变量flag,初值为1,当输入"$"时,将flag置为0, 	建表结束 */
	L=(LinkList)malloc(sizeof(Node));       /* 为头结点分配存储空间*/          
	L->next=NULL;
	printf("请输入要创建线性表的长度\n");
	scanf("%d",&a);    
	for(i=0;i<a;i++)
	{ 
		s=(Node*)malloc(sizeof(Node));  /* 为读入的字符分配存储空间 */  
		s->data=rand();  
		s->next=L->next;  
		L->next=s;  
	}
	len = a;
	return L;
} 

LinkList CreateFromTail()
{
	LinkList   L;
	char c;
	int a,i;
	Node *s,*r;
	int flag=1;
	/* 设置一个标志变量flag,初值为1,当输入"$"时,将flag置为0, 	建表结束 */
	L=(Node *)malloc(sizeof(Node));       /* 为头结点分配存储空间*/          
	L->next=NULL;
	r=L;
	printf("请输入要创建线性表的长度\n");
	scanf("%d",&a);    
	for(i=0;i<a;i++)
	{ 
		s=(Node*)malloc(sizeof(Node));  /* 为读入的字符分配存储空间 */  
		s->data=rand();  
		s->next=s;  
		r=s;  
	}
	len = a;
/*	while(flag)
	{
		c=getchar();
		if(c!='$')
		{
			s=(Node *)malloc(sizeof(Node));
			s->data=c;
			r->next=s;
			r=s;
		}
		else
		{
			flag=0;
			r->next=NULL;
		}
	}/*while*/
	return L;
}

Node *Get (LinkList L, int i)
{
	int j;
	Node *p;
	p=L;j=0;
	while(p->next!=NULL&&j<i)
	{
		p=p->next;
		j++;
	}
	if(i==j) 
	{
		return p;	
	}
	else return NULL;
}

int InsList(LinkList L, int i, int e)
{
	Node *pre,*s;
	int k;
	pre=L;k=0;
	while(pre!=NULL&&k<i-1)
	{
		pre=pre->next;
		k=k+1;
	}
	if(k!=i-1)
	{
		printf("插入位置不合理!");
		return ERROR;
	}
	s=(Node *)malloc(sizeof(Node));
	s->data=e;
	s->next=pre->next;
	pre->next=s;
	return OK;
}

int DelList(LinkList L,int i, int *e)
{
	Node *p,*r;
	int k;
	p=L;k=0;
	while(p->next!=NULL&&k<i-1)
	{
		p=p->next;
		k++;
	}
	if(k!=i-1)
	{
		printf("删除结点的位置i不合理!");
		return ERROR;
	}
	r=p->next;
	p->next=p->next->next;
	*e=r->data;
	free(r);
	return OK;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -