两个链表求和函数c语言 两个链表的合并算法

c语言如何实现两链表合并只要让第一个链表的尾部元素 的 next 指针,指向第二个链表的第一个元素就可以了
如果是双向链表,则除上面操作外 , 再让第二个链表的 prev指针指向第一个链表最后一个元素
C语言 定义一个函数实现两个集合的相加运算 。(用链表的方式实现)#include #include #include #define N 7 typedef enum { add, nul, sub, div1, yu, l, r }OP; int a[N][N] = { { 0, 0, -1, -1, -1, 1, 2 }, { 0, 0, -1, -1, -1, 1, 2 }, { 1, 1, 0, 0, 0, 1, 2 }, { 1, 1, 0, 0, 0, 1, 2 }, { 1, 1, 0, 0, 0, 1, 2 }, }; int top; OP beg; int b[1024]; OP op[1024]; void init_nu( ){ top = 0; } void push_nu( int term ){ b[top++] = term; } int pop_nu( ){ return b[--top]; } int is_empty_nu( ){ return top == 0; } void destory_nu( ) { top = 0; } void init_sign( ){ beg = 0; } void push_sign( OP sign ){ op[beg++] = sign; } void destory_sign( ){ beg = 0; } OP pop_sign( ){ return op[--beg];} OP get_sign( ){ return op[beg - 1]; } int is_empty_sign( ){return beg == 0; } int eval() { int i, j; i = pop_nu(); j = pop_nu(); switch( pop_sign() ) { case '+': push_nu( j + i ); break; case '-': push_nu( j - i ); break; case '*': push_nu( j * i ); break; case '/': push_nu( j / i ); break; case '%': push_nu( ji ); break; defult: break; } } int change( char *s ) { int i; int n = strlen( s ); for( i = 0; in; i++ ) { if( s[i] = '0's[i] = '0's[i] = '9' ) push_nu( 10 * pop_nu() + s[i++] - '0' ); switch( s[i] ) { case '+': while( a[add][get_sign()] = 0 ) eval(); push_sign( add ); break; case '-': while( a[nul][get_sign()] = 0 ) eval(); push_sign( nul ); break; case '*': while( a[sub][get_sign()] = 0 ) eval(); push_sign( sub ); break; case '/': while( a[div1][get_sign()] = 0 ) eval(); push_sign( div1 ); break; case '%': while( a[yu][get_sign()] = 0 ) eval(); push_sign( yu ); break; case '(': push_sign( l ); break; case ')': while( (get_sign()) != l ) eval(); pop_sign(); break; defult: break; } } return pop_nu(); } int main( void ) { char *s = "((5-3)*2+4/22+1)"; init_nu(); init_sign(); printf( "%d\n", change( s )); destory_nu(); destory_sign(); return 0; } 以前编的,希望对你有帮助 。别忘了给我分 。
c语言 链表 两个 链表 求L1∩L2和 L1∪L2 的 程序交集,并集?
========================================
晚上才有时间给你做,现在放出来了 。
可以的话,最好能自己做出来 。这才最有效果的 。
//单链表
#includestdio.h
#includestdlib.h
#define ElemType int
typedef struct LNode //单链基本存储结构
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void InitList(LinkList *L)
{//初始化
if(!(*L=(LinkList)malloc(sizeof(LNode))))//分配空间
exit(EXIT_FAILURE);
(*L)-next = NULL;
}
void ListInsert(LinkList *L,int i,ElemType e)
{
//插入函数
LinkList p,newNode;
int j = 0;
p = *L;
while(pji-1) //找到插入位置的前驱
{
p = p-next;
++j;
}
if(!p || ji-1) exit(EXIT_SUCCESS); //找不到该位置则退出
if(!(newNode=(LinkList)malloc(sizeof(LNode))))
exit(EXIT_FAILURE);
newNode-data = https://www.04ip.com/post/e;
newNode-next = p-next;
p-next = newNode;
}
void CreateList(LinkList *L,int n)
{
//创建单链表函数
LinkList p,newNode;
int i;
printf("请输入元素\n");
p = *L;
for(i=0;in;++i)
{
if(!(newNode=(LinkList)malloc(sizeof(LNode))))
exit(EXIT_FAILURE);
scanf("%d",newNode-data);
newNode-next = NULL;
p-next = newNode;
p = newNode;
}
}
void display(LinkList L)
{
LinkList dis;
printf("链表:");
dis = L-next;
while(dis)
{
printf("%d ",dis-data);
dis = dis-next;
}
printf("\n");
}//union并intersection交

推荐阅读