#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define ERROR -1
#define OK 1
typedef int status;
typedef int LElemType;
typedef struct LNode
{
LElemType elem;
struct LNode *next;
}LNode,*LinkList;
status CreatLinkList(LinkList *L,int n) /*创建带头结点的单链表*/
{
int i,j;
LNode *p, *q;
(*L) = (LinkList)malloc(sizeof(LNode));
if(*L == NULL)
{
printf("out of space");
return ERROR;
}
(*L)->next = NULL;
q = *L; /* 不要用L 去叠代,那样怎么返回链表呢?*/
for (i = n,j = 1; i > 0; i--)
{
p = (LinkList)malloc(sizeof(LNode));
if (p == NULL)
{
printf("out of space");
return ERROR;
}
printf("/n**********请输入第%d个元素********/n",j) ;
scanf("%d",&(p->elem));
p->next = q->next;
q->next = p;
q = p;
j++;
}
return OK;
}
status DeleteLinkList(LinkList *L,int i) /*删除单链表中的元素*/
{
LNode *p,*q;
int j = 0;
p = (*L) ;
while (p && j < i-1)
{
p = p->next;
j++;
}
if (!p)
{
return ERROR;
}
q = p->next;
p->next = q->next;
free(q);
return OK;
}
status IinkListInsert(LinkList *L, int i, LElemType e) /*插入元素*/
{
LNode *p,*s;
int j = 0;
p = (*L);
s = (LinkList)malloc(sizeof(LNode));
if (s == NULL)
{
printf("out of space");
return ERROR;
}
while (p && j < i-1)
{
p = p->next;
j++;
}
if(!p)
{
return ERROR;
}
s->next = p->next;
p->next = s;
s->elem = e;
return OK;
}
status Delete_head (LinkList *L) /*删除头元素*/
{
LinkList p;
p = (*L)->next;
if (p != NULL)
{
(*L)->next=p->next;
free(p);
}
else
;
return OK;
}
status Delete_tail(LinkList *L) /*删除尾元素*/
{
LinkList p,q;
p=(*L)->next;
while(p->next->next)
{
p=p->next;
}
q = p->next;
p->next = NULL;
free(q);
return OK;
}
void output(const LinkList *head)
{
LinkList p;
p = (*head)->next;
do
{
printf("%8d",p->elem);
p = p->next;
}
while(p != NULL);
}
int main(void)
{
LinkList L;
int n,i,e;
printf("请输入你要输入单链中元素的个数");
scanf("%d",&n);
CreatLinkList(&L, n);
output(&L) ;
printf("/n********************************请输入需要删除元素的位置:");
scanf("%d", &i);
DeleteLinkList(&L,i) ;
output(&L) ;
printf("/n********************************请输入需要插入元素的位置和值:");
scanf("%d%d",&i,&e);
IinkListInsert(&L, i, e) ;
output(&L);
printf("/n********************************删除头元素的操作********************************/n");
Delete_head (&L);
output(&L);
printf("/n********************************删除尾元素的操作********************************/n");
Delete_tail(&L);
output(&L);
printf("/n********************************请按任意键退出**********************************/n");
system("pause");
return 0;
}
以前学了顺序表写的 现在觉得乱 主要问题是在mian()中没处理好 应该给读者一个选者的环境 根据读者的意愿
做相关的操作 我一次性把所有的操作做完了 要改进一下 由于懒 没改