单链表的建立及其基本操作的实现(完整程序)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include "stdio.h"/*单链表方式的实现*/
#include "malloc.h"
typedef char ElemType ;
typedef struct LNode/*定义链表结点类型*/
{
ElemType data ;
struct LNode *next;
}LNode,*LinkListΒιβλιοθήκη Baidu/*注意与前面定义方式的异同*/
}
tmp->next=p->next;
free(p);
return1;
}
void main()
{
int i ;
char cmd,e;
LinkList head;
head=(LinkList)malloc(sizeof(LNode));
head->next=NULL;
CreateList_L(head);
/*建立链表,输入元素,头插法建立带头结点的单链表(逆序),输入0结束*/
LinkList CreateList_L(LinkList head)
{
ElemType temp;
LinkList p;
printf("请输入结点值(输入0结束)");
fflush(stdin);
scanf("%c",&temp);
}
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)
break;
case 'd':
case 'D':
printf("请输入您要删除的位置:");
fflush(stdin);
scanf("%d",&i);
ListDel_L(head,i);
ListPint_L(head);
break;
}
}while((cmd!='q')&&(cmd!='Q'));
}
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;
{
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));
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;/*在链表头部插入结点,即头插法*/
switch(cmd)
{
case 'i':
case 'I':
printf("请输入您要插入的数据:");
fflush(stdin);
scanf("%c",&e);
printf("请输入您要插入的位置:");
scanf("%d",&i);
LinkInsert_L(head,i,e);
ListPint_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'));
相关文档
最新文档