您的位置:首页 > 理论基础 > 数据结构算法

数据结构链表的一些操作!

2012-11-02 20:51 288 查看
复试上上机前的一些练手

    

     #include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node *next;
}ListNode;
typedef ListNode *LinkList;
LinkList CreateLinkList()
{
int n,i;
int inputdata;
LinkList head,tmpNode;
head = (LinkList)malloc(sizeof(ListNode));
head->next = NULL;
printf("请输入插入节点的个数!");
scanf("%d",&n);
for (i = 0; i < n; ++i)
{
scanf("%d",&inputdata);
tmpNode = (LinkList)malloc(sizeof(ListNode));
tmpNode->data = inputdata;
tmpNode->next = head->next;
head->next =tmpNode;
}
return head;

}
void PrintLinkList(LinkList head)
{
LinkList tmpNode;
tmpNode = head->next;
while(tmpNode!=NULL)
{
printf("%d ",tmpNode->data);
tmpNode = tmpNode->next;
}
printf("\nOver\n");
}
void DestoryLinkList(LinkList head)
{
LinkList tmpNode;
while(head != NULL)
{
tmpNode = head->next;
free(head);
head = tmpNode;
}
head = NULL;
}
int LinkListSize(LinkList head)
{
int size=0;
LinkList tmpNode=head->next;
while(tmpNode!=NULL)
{
++size;
tmpNode = tmpNode->next;
}
return size;
}
void InsertNode(LinkList head,int data,int pos)
{
int count=0;//记数
int size=0;
printf("Insert 函数调用开始!");
LinkList insertNode=NULL;
LinkList tmpNode = head;
//先检查元素个数
size = LinkListSize(head);
printf("\nsize:%d\n",size);
if(size < pos){
printf("插入位置超过表长\n");
return ;
}
//printf("pos%d\n",pos);
if(pos<=0){
printf("插入位置非法\n");
return ;
}
while(count<pos-1)
{
tmpNode = tmpNode->next;
++count;
}
insertNode = (LinkList)malloc(sizeof(ListNode));
insertNode->data = data;
insertNode->next = tmpNode->next;
tmpNode->next = insertNode;
printf("Insert 函数调用完毕!\n");
}
//返回第pos个位置的节点地址
LinkList FindPos(LinkList head,int pos)
{
LinkList tmpNode = head;
int size;

size = LinkListSize(head);
if (size < pos)
tmpNode = head;
else
{
while(pos--)
{
tmpNode = tmpNode->next;
}
}
return tmpNode;
}
//删除第pos个位置的节点
void DeleteNode(LinkList head, int pos)
{
LinkList tmpNode,delNode;
printf("\nin deleteNode function size:%d\n",LinkListSize(head));
if (pos <= 0 || LinkListSize(head) < pos)
{
printf("删除位置非法\n");
return ;
}
tmpNode = FindPos(head,pos-1);
delNode = tmpNode->next;
tmpNode->next = tmpNode->next->next;
free(delNode);
}
int main()
{
LinkList head;
head = CreateLinkList();
PrintLinkList(head);
InsertNode(head,100,1);

DeleteNode(head,2);
printf("\n打印链表\n");
PrintLinkList(head);

// DestoryLinkList(head);
printf("Hello World!\n");
int n='C';
switch(n++)
{
default:printf("error\n");break;
case 'D':printf("is D\n");

}
return 0;
}

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