/*
10余年的谢家集网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网整合营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整谢家集建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“谢家集网站设计”,“谢家集网站推广”以来,每个客户项目都认真落实执行。
typedef struct list_node
{
Eleme data;
struct list_node *next;
}List_Node,*plist_node;
*/
#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
#include "time.h"
#include "my_data.h"
plist_node Creat(void)/*链表创建函数*/
{
int len,val;//定义列表长度,存放节点数据
plist_node phead = (plist_node)malloc(sizeof(List_Node));//创建分配一个头结点数据
if(phead == NULL)
{
printf("空间分配失败啊!");
exit(-1);
}
plist_node pTail = phead;// 链表的末尾节点,初始指向头节点
pTail-next = NULL;// 最后一个节点指针置为空
printf("输入节点个数:");
scanf("%d",len);
for(int i=0;ilen;i++)
{
plist_node pNew = (plist_node)malloc(sizeof(list_node)); //分配一个新节点
if (pNew == NULL) {
printf("分配新节点失败\n");
exit(-1);
}
printf("请输入第 %d 个节点的数据:", i + 1);
scanf("%d", val); //输入链表节点的数据
pNew-data = val; //把数据赋值给节点数据域
pTail-next = pNew; //末尾节点指针指向下一个新节点
pNew-next = NULL; //新节点指针指向为空
pTail = pNew; //将新节点复制给末尾节点
}
printf("链表创建成功!");
return phead;//返回头结点
}
void Trave(plist_node List)/*链表遍历函数*/
{
plist_node Pn = List-next;
printf("遍历链表的值为:");
if( Pn == NULL)
printf("链表为空!");
while( Pn != NULL)
{
printf("%d \t",Pn-data);
Pn =Pn-next;
}
printf("\n");
}
plist_node Find(plist_node List)/*链表查询函数*/
{
plist_node P = List-next;
int num=0,val=0; //num 为节点位置,val为查询到的值
printf("请输入要查询的值:");
scanf("%d",val);
while(P!= NULL P-data!=val)
{
P=P-next;
++num;
}
if(P!=NULL)
printf("找到的节点为:%d",num+1);
else
printf("找不到该节点!");
printf("\n");
return P;
}
void Inser(plist_node List,int pos,int val)//链表的插入操作,在 pos 号节点处插入数据 val
{
int pin = 0 ;
plist_node P = List;
while(P != NULL pin pos-1)
{
P = P-next;
++pin;
}
plist_node tmp = (plist_node)malloc(sizeof(list_node));//临时节点,用于存储要插入的数据
if( tmp == NULL)
{
printf("内存分配失败!");
exit(-1);
}
//开始插入节点
tmp-data = val;
tmp-next = P-next;
P-next = tmp;
}
void Deletelist(plist_node List,int pos)/*链表元素删除函数*/
{//删除第pos个节点
int pin=0;
plist_node tmp;
plist_node P = List;
while(P != NULL pinpos-1)
{
P = P-next;
++pin;
}
tmp = P-next;
P-next = tmp-next;
P-next = tmp-next;
free(tmp);
tmp=NULL;
}
void UI(int num)
{
switch(num)
{
case 11:
system("cls");
printf("**********首页*********\n");
printf("\n\t*1.创建链表\n");
printf("\t*2.查看链表\n");
printf("\t*3.查询链表\n");
printf("\t*4.插入节点\n");
printf("\t*5.删除节点\n");
printf("\t*0.返回首页\n");
printf("\n**********首页*********\n");
break;
case 1:
system("cls");
printf("****\t*****创建*********\n");
break;
case 2:
system("cls");
printf("****\t*****查看*********\n");
break;
case 3:
system("cls");
printf("****\t*****查找*********\n");
break;
case 4:
system("cls");
printf("****\t*****插入*********\n");
break;
case 5:
system("cls");
printf("****\t*****删除*********\n");
break;
case 0:
system("cls");
printf("****\t**************\n");
break;
default:
break;
}
}
int get1(linklist *head,int ch,int *a)
{
linklist *p=head;
int i=0,j=0;
while(p!=NULL)
{
if(p-data==ch)
{
a[j++]=i;
a=(int*)relloc(a,(j+1)*sizeof(int));
}
i++;
p=p-next;
}
return j;
}
这个函数,返回值是找到的位置的个数,数组a存放的位置的索引。
调用的时候:
int *a;
linklist *head;
//链表初始化
char ch;
//ch初始化
int n=get1(head,ch,a);
if(n!=0)
{
printf("找到了,在");
for(int i=0;in;i++)
printf("%2d",a[i]);
printf("位置\n");
}
else
printf("没有找到\n");
你照下面这个 去写:下面这个是顺序表的基本操作:void main()
{
char a[5]={'a','b','c','d','e'};
int n=5;
char f='f',b='a',e;
SqList sq;
InitList(sq); //初始化表
CreateList(sq,a,n); //传入数据
DispList(sq); //输出表
printf("sq.length=%d\n",ListLength(sq)); //输出表长
if(ListEmpty(sq)) //判断是否为空表
printf("sq是空表\n");
else
printf("sq不是空表\n");
printf("a在第%d位\n",LocateElem(sq,b)); //按元素值查找
ListInsElem(sq,f,4); //在第4个位置上插入f元素
DispList(sq); //输出表
printf("\n");
DelElem(sq,3,e); //删除第三个元素
DispList(sq); //输出表
}
其他函数和链表结构体定义包在头文件中。
#include stdio.h
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}linklist;
//---查找元素------------
linklist *mindata(linklist *head, datatype a)
{
linklist *p;
p = head-next;
while( p != NULL p-data != a)
p = p-next;
}
return p ;
}
//------主函数---------------------
main()
{
linklist *head;
......
getchar();
} // main