数据结构链表的一些操作!
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;
}
#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;
}
相关文章推荐
- 关于数据结构中单链表一些操作
- 关于数据结构->链表的一些基本操作
- Java数据结构---链表常用操作(I)
- C语言(数据结构) - 双向链表的基本操作
- 数据结构:链表的简单操作
- 初学数据结构-单链表初探的一些兴奋点
- [C++]数据结构:有序链表SortedChain的基本实现与操作
- C语言数据结构单链表的一些基本操作
- 华南理工数据结构大作业第一题单链表 删除创建等各种简易操作
- C#版的数据结构(对链表的操作)
- 数据结构:多项式链表的操作
- 【数据结构】 链式队列的一些操作
- 数据结构的一些基本操作(在表L中插入第i个元素e. 操作成功返回OK,失败时返回ERROR,删除表L中第i个元素,结果用e返回. 操作成功返回OK,失败时返回ERROR)
- 【数据结构】 链表的19种基本操作(完整版)
- 【数据结构 笔记01】链表常见操作
- 数据结构上机测试2-2:单链表操作B
- C++数据结构---链表---插入操作
- 对链表的相关操作及数据结构的再理解
- Java数据结构---链表常用操作(II)--续
- 数据结构上机测试2-2:单链表操作B