#include "stdio.h"/*单链表方式的实现*/
#include "malloc.h"
typedef char ElemType ;
typedef struct LNode/*定义链表结点类型*/
{
ElemType data ;
struct LNode *next;
}LNode,*LinkList;/*注意与前面定义方式的异同 */
/*建立链表,输入元素,头插法建立带头结点的单链表(逆序),输入0结束*/
LinkList CreateList_L(LinkList head)
{
ElemType temp;
LinkList p;
printf("请输入结点值(输入0结束)");
fflush(stdin);
scanf("%c",&temp);
while(temp!='0')
{
if(('A'<=temp&&temp<='Z')||('a'<=temp&&temp<='z'))
{
p=(LinkList)malloc(sizeof(LNode));/*生成新的结点*/
p->data=temp;
p->next=head->next;
head->next=p;/*在链表头部插入结点,即头插法*/
}
printf("请输入结点值(输入0结束):");
fflush(stdin);
scanf("%c",&temp);
}
return head;
}
/*顺序输出链表的内容*/
void ListPint_L(LinkList head)
{
LinkList p;
int i=0;
p=head->next;
while(p!=NULL)
{
i++;
printf("单链表第%d个元素是:",i);
printf("%c\n",p->data);
p=p->next;
}
}
/*在带头链表结点的单链表中第i(从1开始)个位置之后插入元素*/
int LinkInsert_L(LinkList head,int i,ElemType e)
{
LinkList p=head;
LinkList s;
int j;
p=p->next;
for(j=1;j<i-1;j++)
{
if(p)p=p->next;
else break;
}
if(!p||i<1)
{
printf("error!!请输入正确的i的值!!");
return 0;
}
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;/*在当前结点p之后插入结点s*/
p->next=s;
return 1;
}
/*在带头结点的单链表中删除第i(从1开始)个位置的元素 */
int ListDel_L(LinkList head,int i)
{
LinkList p,tmp;
int j;
p=head->next;
tmp=head; for(j=1;j<i;j++)/*此for循环来使p指向第i个元素,temp指向第i-1个元素*/
{
if(p)
{
p=p->next;
tmp=tmp->next;
}
else break;
} if(!p||i<1)
{
printf("error!!请输入正确的i值!!");
return 0;
}
tmp->next=p->next;
free(p);
return 1;
}
void main()
{
int i ;
char cmd,e;
LinkList head;
head=(LinkList)malloc(sizeof(LNode));
head->next=NULL;
CreateList_L(head);
ListPint_L(head);
do
{
printf("i,I……插入");
printf("d,D……删除");
printf("q,Q……退出");
do
{
fflush(stdin);
scanf("%c",&cmd);
}while((cmd!='d')&&(cmd!='D')&&(cmd!='i')&&(cmd!='I')&&(cmd!='q')&&(cmd!='Q'));
switch(cmd)
{
case 'i':
case 'I':
printf("请输入您要插入的数据:");
fflush(stdin);
scanf("%c",&e);
printf("请输入您要插入的位置:");
scanf("%d",&i);
LinkInsert_L(head,i,e);
ListPint_L(head);
break;
case 'd':
case 'D':
printf("请输入您要删除的位置:");
fflush(stdin);
scanf("%d",&i);
ListDel_L(head,i);
ListPint_L(head);
break;
}
}while((cmd!='q')&&(cmd!='Q'));
}
08-20
1805
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
08-19
460
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
09-12