您的位置:首页 > 其它

线性表的单链表的定义、初始化等操作

2015-09-22 23:13 405 查看
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERR 0
#define MAXSIZE 100
typedef int ElemType;

//定义
typedef struct Node
{
ElemType data;
struct Node *next;
}Node,*LinkedList;

//初始化
LinkedList LinkedListInit()
{
Node *L;
L = (Node * )malloc(sizeof(Node));
if (L==NULL)
{
printf("申请内存空间失败.");
}
L->next=NULL;
return L;
}

//单链表的建立1,头插入法建立单链表
LinkedList LinkedListCreateHead()
{
Node *Head;
Head = (Node *)malloc(sizeof(Node));//申请头节点空间
Head->next=NULL;
ElemType x;//x为链表数据域中的数据
while (scanf("%d",&x)!=EOF)
{
Node *P;
P=(Node *)malloc(sizeof(Node));

P->data=x;

P->next=Head->next;

Head->next=P;

}
return Head;
}

//单链表的建立2,尾插入法建立单链表
LinkedList LinkedListCreateTail()
{
//申请头节点
Node *Head;
Head = (Node*)malloc(sizeof(Node));
Head->next=NULL;

//定义Tail始终指向终端结点,开始时指向头结点
Node *Tail;
Tail=Head;

ElemType x;
while (scanf("%d",&x)!=EOF)
{
Node *P = (Node *)malloc(sizeof(Node));//申请新的结点

P->data=x;
Tail->next=P;
Tail=P;
}
Tail->next=NULL;
return Head;

}
//单链表的插入,在链表的第i个位置插入x的元素
LinkedList LinkedListInsert(LinkedList L,int i,ElemType x)
{
Node *pre;
pre = L;
int temp=0;
for (temp=1;temp<i;temp++)
pre=pre->next;
Node *P = (Node *)malloc(sizeof(Node));
P->data = x;
P->next=pre->next;
pre->next=P;
return L;

}

//单链表的删除,在链表中删除值为x的元素

LinkedList LinkedListDel(LinkedList L,ElemType x)
{
Node *pre,*p;//p为查找的结点 pre为前驱结点
p=L->next;
while (p->data!=x)
{
pre=p;
p=p->next;

}
pre->next=p->next;
free(p);
return L;

}
//显示单链表数据
void LinkedListShow(LinkedList L)
{
LinkedList temp;
int i=0;
for(i=1,temp = L->next; temp != NULL; i++,temp = temp->next)
printf("(%d)->%d ",i,temp->data);
printf("\n");
}
int main()
{

//键盘中输入EOF方法:press Ctrl+Z on a new line
LinkedList L;
//尾插法建表
printf("请输入单链表的数据:\n");
L=LinkedListCreateTail();
printf("该链表为:\n");
LinkedListShow(L);

int i;
ElemType x;
printf("请输入插入数据的位置和值,用空格隔开:\n");
scanf("%d %d",&i,&x);
LinkedListInsert(L,i,x);
printf("该链表为:\n");
LinkedListShow(L);

printf("请输入要删除的元素的值:");
scanf("%d",&x);
LinkedListDel(L,x);
printf("该链表为:\n");
LinkedListShow(L);

return 0;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: