您的位置:首页 > 编程语言 > C语言/C++

C语言线性表的基本操作

2015-07-13 11:31 543 查看
/*
/*1.创建链表
/*2.获取链表长度
/*3.向指定位置插入链表,成功返回1,否则返回0
/*4.删除链表的某个节点
/*5.输出链表
/*6.判断链表是否为空,不空返回1,否则返回0
*/
#include <stdio.h>
#include <stdlib.h>
#define ElementType int
typedef struct Node{
ElementType e;
struct Node *next;
}Node;
//创建链表
void Create(Node **phead){
ElementType e;
while(1){
scanf("%d",&e);
//输入-1结束
if(e==-1)
return;
//申请新节点
Node *p = (Node*)malloc(sizeof(Node));
p->e = e;
p->next = NULL;
Node *last = *phead;
//判断链表头是否为空
if(last){
//寻找链表尾插入
for(last=*phead;last->next;last=last->next);
last->next = p;
}
else{
*phead = p;
}
}
}
int GetSize(Node **phead){
Node *last;
int size = 0;
for(last=*phead;last;last=last->next){
size++;
}
return size;
}
//向指定位置插入链表,成功返回1,否则返回0
int Insert(Node **phead,int k,ElementType e){
//判断链头是否为空
if(!(*phead)||k<0){
return 0;
}
else{
Node *p = (Node*)malloc(sizeof(Node));
Node *previous;
Node *last;
p->e = e;
p->next = NULL;
//插入链表头
if(k==0){
p->next = *phead;
*phead = p;
}
//插入链尾
else if(k==GetSize(phead)){
for(last=*phead;last->next;last=last->next);
last->next = p;
}
//插入指定节点
else{
int i;
previous = *phead;
for(i = 0;i<k-1;i++)
previous = previous->next;
p->next = previous->next;;
previous->next = p;
}
}
return 1;
}
int Remove(Node **phead,int k){
Node *previous;
Node *last;
int i;
//判断链表是否为空,删除节点位置是否合法
if(!(*phead)||k<0){
return 0;
}
else{
//删除链头
if(k==0){
last = *phead;
*phead = last->next;
free(last);
}
//删除链尾
else if(k==GetSize(phead)-1){
for(last=*phead;last->next;previous = last,last=last->next);
free(last);
previous->next = NULL;
}
//删除节点
else{
previous = *phead;
for(i = 0;i<k-1;i++)
previous = previous->next;
last=previous->next;
previous->next = last->next;
free(last);
}
}
return 1;
}
//判断链表是否为空
int IsEmpty(Node **phead){
if(*phead)
return 1;
return 0;
}
//输出链表所有节点
void Print(Node **phead){
Node *last;
for(last=*phead;last;last=last->next){
printf("%d\t",last->e);
}
printf("\n");
}
main(){
Node *list;
Create(&list);
printf("size of list:%d\n",GetSize(&list));
Insert(&list,0,6);
Remove(&list,2);
Print(&list);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: