您的位置:首页 > 其它

单链表的初始化,插入删除等操作

2013-07-27 19:31 453 查看
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define error -1

typedef struct node
{
char data[10];
struct node *next;
}node,*LinkList;

node *ListCreate(int n)//建立单链表,该单链表有头结点
{
//node *p,*h,*s;
LinkList p,h,s;
h = (LinkList)malloc(sizeof(node));
h->next = NULL;
p = h;
for(int i=0;i<n;i++)
{
s = (LinkList)malloc(sizeof(node));
scanf("%s",s->data);
//s->data = "lv";
p->next = s;
s->next = NULL;
p = s;
}
return h;
}

int DispList(LinkList h)//输出单链表
{
LinkList p = h->next;
while(p != NULL)
{
printf("\n%s ",p->data);
p = p->next;
}
getchar();
return 1;
}

int length(LinkList &h)//单链表的测长,h前为什么加不加&都可以,可能是引用的问题????
{
int n=0;
LinkList p = h;
while(p->next!=NULL)
{
p = p->next;
n++;
}
return n;
}

int ListDelete(LinkList &h,int i)//删除单链表中的某个结点
{
LinkList p = h,q;
int j=0;
while(p->next!=NULL && j<i-1 )
{
p = p->next;
j++;
}

if((p->next)==NULL || j>i-1)  return error;

q = p->next;
p->next = q->next;
free(q);

return 1;
}

int ListInsert(LinkList &h,int i)//在带头结点的单链表L中第i个位置之前插入元素
{
LinkList p=h,s,q;
int j=0;
while(p && j<i-1)
{
p = p->next;
j++;
}
if(!p || j>i-1) return error;//i小于1或大于表长加1
s = (LinkList)malloc(sizeof(node));
printf("\n插入的元素");
scanf("%s",s->data);

s->next = p->next;
p->next = s;

return 1;
}

int main()
{
int num=4;
int len;
//node *head;
LinkList head;
head = ListCreate(num);//建立单链表
printf("\n建立的单链表:");
DispList(head);//单链表打印

len = length(head);//单链表测长
printf("\n单链表的长度:");
printf("\n%d",len);

ListDelete(head,2);
printf("\n删除某一结点后的单链表:");
DispList(head);

ListInsert(head,4);
printf("\n插入某一结点后的单链表:");
DispList(head);
getchar();
return 0;

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