#include<malloc.h>
//#include<string.h>
//完成一部分,只有初始化和输出,其余明天继续
typedef struct List{
int data;
struct List * pnext;
}sqList;
//动态链表的生成 用单循环链表
void InitList(sqList * list); //初始化链表
void ShowList(sqList list);
void InsertList(sqList * list );//插入一个数值链表
void DeleteList(sqList * list , int position); //删除第position元素
bool IsEmpty(sqList list); //判断是否为空
void Findpositon(sqList * list , int b );//查找b在链表中的位置
void showmenu();
int main()
{
int i ;
sqList *p;//头指针 下面这4行,初始化头指针和头结点
sqList head; //头结点
head.data = 0;
p = &head;
head.pnext = &head;
showmenu();
for(int j = 0; j<= 10 ;j++)
{
scanf("%d",&i);
switch(i)
{
case 1:
InitList(&head);
break;
case 2:
ShowList(head);
break;
case 3:
InsertList(&head );
break;
}
}
return 0;
}
void showmenu()
{
printf("1创建动态链表\n");
printf("2插入数值进链表\n");
printf("3删除第n个位置元素\n");
printf("4输出链表\n");
printf("5判断链表是否为空\n");
printf("6查找元素在链表的位置\n");
}
void InitList(sqList * head)
{
int i = 1;
int b = 1;
sqList * tailp; //创建的尾指针
tailp = head;
printf("输入0 则退出 输入\n");
while(b != 0)
{
printf("请输入第%d元素\n" , i);
scanf("%d",&b);
sqList * pp;
if(b!=0)
{pp = ( sqList *) malloc(sizeof(sqList));
tailp->pnext = pp;
pp->data = b;
tailp = pp;
tailp->pnext = head;
i++;
(head->data)++;
}
else
{
}
//头结点的data用来存取个数
}
printf("您输入的链表长度是%d",head->data);
}
void ShowList(sqList list) //链表必须有个头节点,还应该创建一个指针,使其一次一次后移,输出数据
{
sqList * pp ;
pp = &list;
/* while( ((pp->pnext)->data) != list.data ) //比较头结点的存的数值 ,尾节点的next指向head,
{
printf("%d\t",((*pp).pnext)->data);
pp = pp->pnext;
*/ //错误的方法,因为数据总量,可以和存的值,相同,所以头结点->data 提前等于数据长度,所以不适合
int k = 0;
for(k=1 ; k <= list.data; k++)
{
printf("%d \t" ,(*pp->pnext).data );
pp = pp->pnext;
}
}
void InsertList(sqList * list )//插入一个数值链表
{
int b1,position1;
printf("请输入要插入的元素");
scanf("%d",&b1);
printf("请输入要插入的位置");
scanf("%d",&position1);
/* sqList pt; //创建一个结构体,用于保存输入的值
pt.data = b1;
sqList * ppt = &pt; //创建一个指针,指向新创建的结构体
sqList * pp;
pp = list;
int j ;
if(position1 ==1)
{
ppt->pnext = pp->pnext ;
pp->pnext = &pt; 注释这个方法错误,没用动态的创造空间
}
else
{
for( j =1 ; j <position1; j++ )
{
pp = pp->pnext;
}
ppt->pnext = pp->pnext;
pp->pnext = &pt;
}*/
sqList * pt = (sqList *) malloc (sizeof(sqList));
pt->data = b1;
sqList * pp = list;
if(position1 ==1)
{
pt->pnext = pp->pnext ;
pp->pnext = pt;
}
else
{
int j ;
for( j =1 ; j <position1; j++ )
{
pp = pp->pnext;
}
pt->pnext = pp->pnext;
pp->pnext = pt;
}
(list->data)++;
}