单链表
来源:互联网 发布:python开发应用 编辑:程序博客网 时间:2024/06/10 02:15
/******main测试函数********/
#include <stdio.h>
#include <strings.h>
#include "linklist.h"
int main()
{
int a[] = {9, 6, 3};
linklist H;
int i;
H = list_create();
for (i = 0; i < sizeof(a)/sizeof(int); i++)
list_insert(H, a[i], 0);
list_show(H);
list_insert(H, 10, 6);
list_show(H);
list_delete(H, 5);
list_show(H);
list_order_insert(H, 70);
list_show(H);
list_reverse(H);
list_show(H);
return 0;
}
/******linklise.c********/
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include "linklist.h"
linklist list_create()
{
linklist H;
H = (linklist)malloc(sizeof(listnode));
if (H == NULL)
{
printf("malloc error\n");
return H;
}
H->data = 0;
H->next = NULL;//0x0
return H;
}
int list_insert(linklist H, datatype x, int pos)
{
linklist p = H, q;
while (pos)
{
p = p->next;
if (p == NULL)
{
printf("insert position is invalid\n");
return -1;
}
pos--;
}
q = (linklist)malloc(sizeof(listnode));
if (q == NULL)
{
printf("malloc error\n");
return -1;
}
q->data = x;
q->next = p->next;
p->next = q;
return 0;
}
int list_order_insert(linklist H, datatype x)
{
linklist p = H, q;
while (p->next != NULL && p->next->data < x)
p = p->next;
q = (linklist)malloc(sizeof(listnode));
if (q == NULL)
{
printf("malloc error\n");
return -1;
}
q->data = x;
q->next = p->next;
p->next = q;
return 0;
}
int list_delete(linklist H, int pos)
{
linklist p = H, q;
while (pos)
{
p = p->next;
if (p == NULL)
{
printf("delete position is invalid\n");
return -1;
}
pos--;
}
if (p->next == NULL)
{
printf("delete position is invalid\n");
return -1;
}
q = p->next;
p->next = q->next;
free(q);
q = NULL;
return 0;
}
int list_reverse(linklist H)
{
linklist p, q;
p = H->next;
H->next = NULL;
while (p != NULL)
{
q = p;
p = p->next;
q->next = H->next;
H->next = q;
}
return 0;
}
int list_show(linklist H)
{
linklist p = H->next;
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
return 0;
}
/******linklist.h********/
#ifndef _LINKLIST_H_
#define _LINKLIST_H_
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}listnode, *linklist;
//typedef struct node listnode;
//typedef struct node * linklist;
linklist list_create();
int list_insert(linklist H, datatype x, int pos);
int list_order_insert(linklist H, datatype x);
int list_delete(linklist H, int pos);
int list_reverse(linklist H);
int list_show(linklist H);
#endif
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 内存分配方式
- Windows & Linux 文件格式之迷 < VI下删除文本中的^M>
- 【openstack】Nova(Folsom)虚拟化层Driver分析
- 执行外部程序
- 布局中的Padding与Margin的区别
- 单链表
- SQLite3学习之基本SQL语法使用-wince6.0
- elmah的使用
- 如何通过CuteFTP实现在windows环境下和Ubuntu进行文件相互传输
- gdb fork进程,多线程调试
- smarty中if elseif的简单应用(左中右对齐)
- sql语句联合及联系
- 自定义SearchView
- 烟雨江南